Mysql 5.7存储过程的学习,
-- 无参创建 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");
6.查看存储过程:
-
- 查看存储过程的创建语句:show create procedure 存储过程名;
- 查看存储过程状态:show procedure status;【显示的内容包括创建时间、注释、定义的用户、安全类型等等】
7.修改存储过程:
-
- 修改存储过程只能修改那些选项,并不能修改传入传出参数或者sql语句。
- alter procedure 存储过程名 选项;
8.删除存储过程:
-
- 语法:drop procedure 存储过程名;
- 示例:
-
drop procedure demo1;
-
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。