-
SQL Server 存储过程SQL语句的拼接
2020-12-26 17:11:27SQL Server 存储过程SQL语句的拼接场景
在存储过程中拼接SQL,有过经历的人都知道,字符拼接的单引号是多么的…本人觉得这玩意类似于正则了,就是不断尝试,碰巧又撞到了新的写法,拼接 in语句 ,这里就记录下…
直接上SQL
DECLARE @Id NVARCHAR(max); DECLARE @Name NVARCHAR(50); DECLARE @SQL NVARCHAR(MAX); Set @Id='N''31CB7589-98F4-411B-82BB-66497B252FB3'',N''31CB7589-98F4-411B-82BB-66497B252FB3'',N''31CB7589-98F4-411B-82BB-66497B252FB3'''; Set @Name=N'张三'; Set @SQL='Select * From Person where Name=N'''+@Name+''''; Set @SQL+=' and F_Id in('+@Id+')'; -- 打印 print(@SQL) -- 执行 exec(@SQL)
这样拼出来的SQL是正确,可以执行的,结果如下:
-
Oracle之创建存储过程SQL语句
2020-05-19 17:23:261、创建存储过程。 create or replace procedure myprocedure(sid in number) as exam number; begin select * from score where sid=score.userid; dbms_output.put_line(exam); if exam>60 then dbms_o一、某学生成绩大于60分,输出good;某学生成绩小于60分输出oh no。(在输出中查看信息)
~需要一张成绩表单,包含成绩信息和学生学号。
1、创建存储过程。create or replace procedure myprocedure(sid in number) as exam number; begin select * from score where sid=score.userid; dbms_output.put_line(exam); if exam>60 then dbms_output.put_line('good'); else dbms_output.put_line('oh no'); end if; end myprocedure;
2、调用该存储过程,括号内为学生学号。
begin myprocedure(1007); end;
二、若全班平均成绩大于等于60分,输出good;若平均成绩小于60分,每位同学成绩在原来基础上+5分(做循环),直到输出为good,停止循环。
~需要一张成绩表单,包含所有学生成绩。
1、创建存储过程。create or replace procedure system.scr_pro as avgscnum number; begin select avg(scnum) into avgscnum from system.score; while avgscnum<60 loop select avg(scnum) into avgscnum from system.score; dbms_output.put_line(avgscnum); if avgscnum>=60 then dbms_output.put_line('good'); else update system.score set scnum=scnum+5; end if; end loop; end scr_pro;
2、调用该存储过程。
begin system.scr_pro; end;
~注:
1、空格、分号在英文状态下输入;
2、千万不要忘记,该写分号时,一定不能忘(自己就吃了亏);
3、敲代码,练习自己的逻辑思维。 -
sqlserver 导出数据库所有存储过程sql语句
2013-08-22 11:55:23经常遇到一个问题就是需要一次性导出某个数据库下的所有【或者指定某些】存储过程、视图或者表的sql语句。这样的话,我每次都用【sp_helptext 存储过程名称】的语句来一个一个的执行,很费时呢,而且还容易漏或错,... -
存储过程与SQL语句对比
2019-04-24 11:09:03存储过程与SQL语句对比 优势: 1、提高性能 SQL语句在创建过程时进行分析和编译。 存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划,这样,在...存储过程与SQL语句对比
优势:
1、提高性能
SQL语句在创建过程时进行分析和编译。 存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划,这样,在执行过程时便可节省此开销。
2、降低网络开销
存储过程调用时只需用提供存储过程名和必要的参数信息,从而可降低网络的流量。
3、便于进行代码移植
数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。
4、更强的安全性
1)系统管理员可以对执行的某一个存储过程进行权限限制,避免非授权用户对数据的访问
2)在通过网络调用过程时,只有对执行过程的调用是可见的。 因此,恶意用户无法看到表和数据库对象名称、嵌入自己的 Transact-SQL 语句或搜索关键数据。
3)使用过程参数有助于避免 SQL 注入攻击。 因为参数输入被视作文字值而非可执行代码,所以,攻击者将命令插入过程内的 Transact-SQL 语句并损害安全性将更为困难。
4)可以对过程进行加密,这有助于对源代码进行模糊处理。劣势:
1、存储过程需要专门的数据库开发人员进行维护,但实际情况是,往往由程序开发员人员兼职
2、设计逻辑变更,修改存储过程没有SQL灵活
为什么在实际应用中,存储过程用到相对较少呢?
在通常的项目研发中,用存储过程却相对较少,这是为什么呢?
分析原因如下:
1)没有特定的数据库开发人员,普通程序员兼职进行数据库操作
2)程序员往往只需操作程序,即可完成数据访问,无需再在数据库上进行开发
3)项目需求变动比较频繁,修改SQL语句比较方便,特别是涉及逻辑变更存储过程与SQL语句如何抉择?
基于实际应用的经验,给予如下建议:
1、在一些高效率或者规范性要求比较高的项目,建议采用存储过程
2、对于一般项目建议采用参数化命令方式,是存储过程与SQL语句一种折中的方式
3、对于一些算法要求比较高,涉及多条数据逻辑,建议采用存储过程 -
存储过程与SQL语句的区别
2020-02-18 21:15:37存储过程(Stroed Proceduer)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后,存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程有参数)来执行它。再运行存储过程前,...存储过程(Stroed Proceduer)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后,存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程有参数)来执行它。再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以鸡块的速度执行。
SQL语句即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。
存储过程包含SQL语句。
存储过程的代码建立与规则,已经在之前的文章中涉及该篇不再赘述,点击链接查看:存储过程的创建与修改,存储过程的创建规则。
存储过程的优点:
存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要数据库提供相同的服务时,只需再次执行该存储过程。
1.具有更好的性能
存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速度。
2.功能实现更加灵活
存储过程中可以应用条件判断和游标等语句,有很强的灵活性,可以直接调用数据库的一些内置函数,完成复杂的判断和较复杂的运算。
3.减少网络传输
复杂的业务逻辑需要多条 SQL 语句,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会减少,降低了网络负载。
4.具有更好的安全性
(1)数据库管理人员可以更好的进行权限控制,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。
(2)在通过网络调用过程时,只有对执行过程的调用是可见的。无法看到表和数据库对象名称,不能嵌入SQL 语句,有助于避免 SQL 注入攻击。
存储过程的弊端:
1.架构不清晰,不够面向对象
存储过程不太适合面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,业务逻辑在存储层实现,增加了业务和存储的耦合,代码的可读性也会降低,
2.开发和维护要求比较高
存储过程的编写直接依赖于开发人员,如果业务逻辑改动较多,需要频繁直接操作数据库,大量业务降维到数据库,很多异常不能在代码中捕获,出现问题较难排查,需要数据库管理人员的帮助。
3.可移植性差
过多的使用存储过程会降低系统的移植性。在对存储进行相关扩展时,可能会增加一些额外的工作。
存储过程与SQL语句如何抉择
架构设计没有绝对,只有在当前的场景下最合适的。
普通的项目开发中,不建议大量使用存储过程,对比SQL语句,存储过程适用于业务逻辑复杂,比较耗时,同时请求量较少的操作,例如后台大批量查询、定期更新等。
(1)当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时可以考虑应用存储过程
(2)在一个事务的完成需要很复杂的商业逻辑时可以考虑应用存储过程
(3)比较复杂的统计和汇总可以考虑应用后台存储过程资料来源:https://www.cnblogs.com/binyue/p/6442310.html
存储过程与sql语句的区别:
1、编写
存储过程:编写比较难;
sql语句:相对简单;
2、性能
存储过程:高,可移植性高,复用性高;
sql语句:低,可移植性差,不可复用;
3、安全
存储过程:比sql语句相对来说安全;
sql语句:参数化比较安全;
4、网络传输
存储过程:数据量小,减少网络数据传输量,只需存储过程名即可;
sql语句:数据类量大,占用带宽大;
5、速度
存储过程:速度快,已经编译过了;
sql语句:预编译,执行一行编译一行;
资料来源:https://www.cnblogs.com/zlp520/p/3553559.html
-
DB2查看存储过程里SQL语句的执行情况
2019-07-16 13:42:02DB2查看存储过程里SQL语句的执行情况 动态SQL可以用snapshot查看,存储过程里SQL语句的执行情况用event monitor查看。但是event monitor没有记录SQL语句,而是记录了package id和S... -
SQL存储过程中SQL语句拼接
2013-03-19 10:11:42SQL存储过程中SQL语句拼接 转载自http://blog.sina.com.cn/s/blog_a525ba0201016klz.html 当作例子,看懂。 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================... -
执行存储过程/存储过程中执行SQL语句
2019-04-02 10:10:59外部工具中执行存储过程(调试一下该存储过程效果一样) EXEC APP022.APP_OXYGEN_PRO.PRO_UPDATE_ID(‘hellowhat’);...存储过程中执行sql str:=‘select * from table’; EXECUTE IMMEDIATE STR; ... -
什么是存储过程?存储过程与SQL语句对比,使用存储过程的优点?
2017-02-23 13:20:10存储过程:使用一个名称存储的预编译T-SQL语句和流程控制语句的集合 由数据库开发人员或数据库管理员编写 用来执行管理任务或应用复杂的业务规则 优点:执行速度更快 首次运行时,进行优化和编译得到执行计划并... -
oracle存储过程,sql语句执行时间
2018-09-05 14:11:00oracle存储过程,sql语句执行时间 create or replace procedure sum_info is i integer; temp1 varchar2(50); temp2 varchar2(50); t1 date; t2 date; v_sql varchar2(100); v_sqm varchar... -
SQL Server 存储过程和触发器sql语句练习
2015-12-18 22:25:31SQL Server 存储过程和触发器sql语句练习 -
sql server、db2、oracle 存储过程动态sql语句示例
2015-02-02 20:04:37sql server、db2、oracle 存储过程动态sql语句示例 -
存储过程和SQL语句比较及存储过程在C#中调用方法
2011-02-10 09:43:00存储过程和SQL语句比较及存储过程在C#中调用方法 -
剑指Offer——常用SQL语句、存储过程和函数
2016-11-08 11:08:42剑指Offer——常用SQL语句、存储过程和函数常用SQL语句1.在MySQL数据库建立多对多的数据表关系2.授权、取消授权grant、revokegrant select, insert, update, delete on testdb.* to common_user@’%’; revoke all ... -
删除数据库所有存储过程的SQL语句
2017-11-29 08:47:30下面为您介绍能够一次性删除数据库所有存储过程的SQL语句,供您参考,如果您对相关的SQL语句感兴趣,不妨一看,希望能够对您有所启迪。 --/第1步**********删除所有表的外键约束*************************/ ... -
存储过程中拼接SQL语句
2017-07-10 14:42:00很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了。具体看如下演示代码: 代码: set ANSI_NULLS ON set ... -
pg存储过程和sql语句块
2017-11-28 23:57:00展E宝项目使用的是postgresql数据库...创建存储过程语句有固定的架子,如下 CREATE OR REPLACE FUNCTION public.loop_insert() RETURNS void LANGUAGE plpgsql AS $function$ DECLARE i integer; BEGIN ... -
sql语句查询存储过程
2020-04-09 15:00:09sql语句 SELECT * FROM user_source WHERE NAME = 'MOBILELOGIN' ORDER BY LINE user_source :自带视图,照填就行 MOBILELOGIN:<存储过程>名,全部转化成大写 执行结果 -
oracle存储过程的SQL语句转化成HIVE的SQL
2019-04-05 15:09:51这里转换成hive的sql语句:hql,其根本问题是为了解决hive不支持事物处理、数据删除操作,这两点是hive的sql和传统sql差异的主要点; 就比如一段存储过程,现在需要迁移到hive上运行,一般主要过程:声明变量、初始... -
为什么存储过程比sql语句效率高?
2018-04-24 10:15:24存储过程经过预编译处理 而SQL查询没有SQL语句需要先被数据库引擎处理成低级的指令 然后才执行-------------------------------------------------------如果是只执行一次的话,存储过程不一定比SQL语句效率高.... -
mysql 存储过程 动态sql语句
2013-05-08 10:59:40mysql存储过程,触发器变量作表名 最近写一些mysql的存储过程和函数,发现网上比较有价值的文档很少,大都是照着... 简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表 -
Java调用存储过程及SQL语句
2019-11-07 16:29:28--Java调用存储过程 Connection con = null; CallableStatement stmtCall=null; try { con = DBCommand.getConnection(); stmtCall = con.prepareCall("{call pk_xxx_xxx.GetXXX(?,?,?,?,?,?) }"); stmtCall.... -
postgresql存储函数/存储过程用sql语句来给变量赋值
2020-11-18 15:29:25--定义变量 a numeric; 方式一: select sqla into a from table1 where b =... --这是sql语句赋值 方式二: sql1:= 'select a from table1 where b = ' '1' ' '; execute sql1 into a; --这是执行存储函数赋值 -
oracle 存储过程 动态sql语句
2018-03-23 20:55:01hospitalcode, -- 执行sqlr_result 中的sql 语句 并把值 into 给下面的字段 pat_type, pat_no, pat_id, pat_cardno, inp_id, inp_date, pat_name, pat_sex, pat_birth, pat_diag, charge_typeno, req_wardno, req_... -
存储过程与SQL语句使用简则
2011-10-27 18:35:52记得刚一开始使用数据库的时候就用存储过程编程,一直没怎么用过SQL语句,后来有人问我为什么一直用它,我说习惯了,问我两者的区别是什么,我也说不好,今天在一本书上偶然看到,特记下来,好记心不如烂博客。... -
sqlserver存储过程拼接sql语句,执行报错“列名无效”
2018-03-26 16:27:24今天写存储过程,遇到一个问题,具体如下:需求是要统计一张报表,这张表的列不固定,因此在存储过程里做插入语句的时候,就用到了sql语句拼接再执行。这里拼接的insert语句是set @sql= 'insert into ##tn(prj) ...
-
持续集成入门到精通:Maven私服Nexus的搭建
-
Day 18 类的继承、访问权限、拷贝和内存管理
-
Glasterfs 分布式网络文件系统
-
leetcode 1431. Kids With the Greatest Number of Candies(python)
-
RecipeApp:with使用Vue.js构建的食谱应用程序-源码
-
正则控制输入input只能输入数字、小数
-
多信号-源码
-
Mysql数据库面试直通车
-
持续集成入门到精通:本地Maven的配置
-
cnp_calculator-源码
-
使用 Linux 平台充当 Router 路由器
-
为什么有了Dockerregistry还需要Harbor?
-
Samba 服务配置与管理
-
1013 Battle Over Cities (25 分)十分委婉的让你求连通图个数
-
自动化测试Python3+Selenium3+Unittest
-
2021-02-25
-
基于计算机视觉的无人驾驶感知系统
-
JMETER 性能测试基础课程
-
ReactNative从入门到原理
-
设置代码高亮