存储过程

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

posted @ 2022-03-22 12:24  万溪汇海  阅读(92)  评论(0编辑  收藏  举报