(1) 优点:
更强的适应性与复用性------存储过程可以重复使用,提高了可重用性,减少数据库开发人员的工作量。
可维护性高------更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
安全性高,可设定只有某用户才能对指定存储过程的使用权,且存储过程比多条sql稳定,只要数据库不出现问题,基本上是不会出现什么问题的,同时可以防止 sql注入。
(2) 缺点:
开发调试差:无良好的ide开发工具,存储过程的调试比一般sql要复杂的多。
可移植性差:由于存储过程将应用程序绑定到数据库上,因此使用存储过程封装业务逻辑将限制应用程序的可移植性,如果应用程序进行数据源的切换(mysql-->orcle),需重新编写存储过程。
-- 无参创建 create procedure demo1() begin select * from cli_txinfo limit 1; end; -- 调用,输出查询结果 call demo1(); -- 2.有参创建,格式为:in 参数名 类型(长度).... -- 单参demo2(in tablename varchar(20)) -- 多参demo2(in tablename varchar(20),name varchar(40)) create procedure demo2(in tablename varchar(20),name varchar(40)) begin select * from cli_txinfo where txname = name limit 1; end; -- 调用,输出查询结果 call demo2("abc001","专属顾问绑定申请列表查询"); --3.有参创建,值返回格式为:out 参数名 类型(长度) create procedure demo3(in tx varchar(20),out otx varchar(20)) begin select txname from cli_txinfo where txcode = tx into otx; end; -- 调用,输出结果存储到@tx中,只显示sql的执行情况,没有输出操作结果,变量命名必须以@开头 -- call demo3("abd002",tx); ---->>编译错误 call demo3("abd002",@tx); -- 变量传参,格式为 set @变量名 = 值 -- set @a = "abd002"; -- call demo3(@a,@tx); -- 查询输出结果变量名的值 select @tx; -- 存储过程的复杂sql语句 create procedure demo4() begin select * from cli_txinfo limit 1; select * from cli_role limit 1; end; demo call demo4; -- 动态传入表名(案例以两个数据库进行表的同步) -- 使用concat进行sql的拼接,拼接处必须留有空格,比如 concat('insert into '),不然拼接无法识别参数 -- prepare预处理,execute 执行,deallocate prepare释放资源 create procedure demo5(in synctable varchar(20)) begin set @deletesql = concat('truncate table keyun.',synctable); set @insertsql = concat('insert into keyun.',synctable,' select distinct * ','from keyun_sync.',synctable); prepare delstmt from @deletesql; prepare insstmt from @insertsql; execute delstmt; execute insstmt; deallocate prepare delstmt; deallocate prepare insstmt; end; -- 调用,输出查询结果 call demo5("third_binding");
drop procedure demo1;
如对本文有疑问, 点击进行留言回复!!
MySQL-关系代数-并、交、差、等值连接、自然连接、左连接。。。
【MySQL牛客】10.获取所有非manager的员工emp_no
网友评论