存储过程:
是一组为了完成特定功能的sql语句的集合。类似于函数。
写好了一个存储过程之后,我们可以像函数一样随时调用sql的集合。
复杂的,需要很多sql语句联合执行完成的任务。
存储过程在执行上比sql语句的执行速度要快,效率也更高。
创建存储过程:
delimiter $$
create procedure proc ()
begin
select * from info12;
end $$
delimiter;
delimiter $$(将语句的结束符号从分号,临时改变成两个$$)
create procedure proc ()
创建存储过程proc,不能重复,在当前库中唯一。()里面不定义任何方法。
BEGIN (过程体开始的关键字)
select * from info;(begin后面跟上的是需要执行的sql语句。)
end $$ (整个语句结束,和上面的定义开始符号一一对应)
delimiter; (将结束符号恢复成分号)
delimiter的作用保证整个存储过程的中的sql语句能够被完整的执行。否则可能在前面的SQL语句结束运行。
SHOW CREATE PROCEDURE Proc;查看
SHOW CREATE PROCEDURE Proc\G
show procedure status where db='kgc';
show procedure status like '%proc%';查看全库
call proc;调用
drop procedure if exists proc;删除
存储过程的参数运用
1、in输入参数,调用者向存储过程传入值
2、out输出参数,表示存储过程向调用者传出值。(可以返回多个值)
3、INOUT:表示调用者向存储过程传入值,存储过程对传入值可能进行额外的操作之后,返回给调用者。
1传入参数的存储过程 :
mysql> delimiter $$
mysql> create procedure proc3 (in uname char(20))
-> begin
-> select * from student where name=uname;
-> delete from student where name=uname;
-> select * from student;
-> end $$
mysql> delimiter ;
call proc3 ('张三');调用传参的存储过程
2传出参数的存储过程(out)
mysql> delimiter $$
mysql> create procedure test(out num int)
-> begin
-> set num=100;
-> end $$
mysql> delimiter ;
3输入输出参数(inout)
mysql> create procedure proc5 (inout a int)
-> begin
-> select a;
-> set a=a+10;
-> select a;
-> end $$
delimiter ;
存储过程的控制语句
if条件判断语句
mysql> delimiter $$
mysql> create procedure test2(in num int)
-> begin
-> if num >=10 then
-> set num=num-5;
-> else
-> set num=num*2;
-> end if;
-> select num;
-> end $$
mysql> delimiter ;
while循环条件语句
mysql> delimiter $$
mysql> create procedure test3 ()
-> begin
-> declare a int;
-> declare i int;
-> set a=10;
-> set i=1;
-> while i<=10 do
-> set a=a+10;
-> set i=i+1;
-> end while ;
-> select a;
-> end $$
mysql> delimiter ;
注意点:使用存储过程中,在内部变量不需要加@,外部使用和复制要加@,引用变量
在存储过程begin之后声明变量:declare a INT;declare i INT;声明变量要加数据类
型。
要想使用存储过程里面的结果,必须要out才能传出参数。在声明存储变量是,要
定义好参数的传参方式in out INOUT。