存储过程
1、存储过程
1.1 无参存储过程
1 delimiter // 2 3 create procedure 存储过程名() 4 5 Begin 6 7 <SQL语句>; 8 9 end// 10 11 delimiter; 12 13 调用 14 15 call 存储过程名()
1.2 例子 插入一万条数据
1 DELIMITER // #delimiter打包所在的代码块一起执行,里面遇到分号也不会单独执行 2 3 CREATE PROCEDURE inset_test() 4 5 BEGIN 6 7 SET @i=1; 8 9 WHILE @i<=10000 DO 10 11 /** 12 13 concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。 14 15 */ 16 17 insert into test(id,name) values(@i,CONCAT(“user”,@i)) 18 19 SET @i=@i+1; 20 21 END WHILE; 22 23 END // 24 25 DELIMITER
1.3 有参存储过程
1 delimiter // 2 3 create procedure 存储过程名称(参数1,参数2…) 4 5 begin 6 7 <sql语句> 8 9 end;// 10 11 delimiter;
1.4 例子 插入一万条数据
1 DELIMITER // 2 3 CREATE PROCEDURE insert_test2(in n int) 4 5 BEGIN 6 7 SET @i<=n 8 9 WHILE @i<=n DO 10 11 insert into test(id,name) values(@i,CONCAT(“user”,@i)) 12 13 set @i=@i+1; 14 15 END WHILE; 16 17 END // 18 19 DELIMITER; 20 21 22 23 CALL insert_test2(10000)
2 默认参数的存储过程
接受三种类型参数
in 仅用于传入参数用
out 仅用于返回值用
inout 既可传入又可以当做返回值
2.1 in 传入参数
in:参数初始值在存储过程前被指定为默认值,在存储过程中修改该参数的值不能被返回
1 set @mathematics=0; 2 3 delimiter // 4 5 create procedure into_demo(in num int) 6 7 BEGIN 8 9 select mathematics;#初始值已被定义为0 10 11 set mathematics=1; 12 13 select mathematics;#此处mathematics=1 14 15 end // 16 17 delimiter; 18 19 call p2(@ num) 20 21 select num; #num依然是0,不能返回1
2.2 out 输出参数
out:参数初始值为空,该值可在存储过程内部改变,并可返回
1 set @ num=0; 2 3 delimiter //; 4 5 create procdure out_demo(out num int) 6 7 begin 8 9 select num;--初始值为null 10 11 end // 12 13 delimiter; 14 15 --out 参数 调用 16 17 call out_demo(@num); --num参数可返回1
2.3 inout 输入输出参数
inout输入输出参数:参数初始值在存储过程前被指定为默认值,并且可在存储过程中杯改变和在调用完毕后可被返回。跟out输出参数的区别在于,应用out参数时,初始值被定义为null,应用inout 参数值时,初始值被定义为0
1 set @num=0; 2 3 declimiter // 4 5 create procedure inout_demo(inout num int) 6 7 begin 8 9 select num;#初始值被定义为0; 10 11 set num=1; 12 13 select num;--初始值被定义为1 14 15 end // 16 17 declimiter; 18 19 --inout 参数 调用 20 21 call inout_demo(@num) 22 23 select num;--num返回值1
3 调用存储过程
--无参数
call 存储过程名()
--有参数 全in
call 存储过程名(1,2)
--有参数,有in,out,inout
call 存储过程名(1,2,@t1,@t2)
4 删除/更改存储过程
#修改存储过程
alter procedure 存储过程名
#删除存储过程
drop procedure 存储过程名
5 查看存储过程
使用sys.sql_modules(系统视图)查看存储过程的定义
selext * from sys.sql_modules;
使用object_definition查看存储过程的定义
select OBJECT_DEFINITION(309576141)
使用sp_helptext查看存储过程的定义
sphelptext ‘Proc_Stu’
参考来源:
https://www.cnblogs.com/uncleyong/p/15874340.html