数据库存储过程

存储过程:

是一组为了完成特定功能的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 ('张三');调用传参的存储过程 

数据库存储过程_第1张图片

数据库存储过程_第2张图片

2传出参数的存储过程(out)

mysql> delimiter $$
mysql> create procedure test(out num int)
    -> begin
    -> set num=100;
    -> end $$
 mysql> delimiter ;
 数据库存储过程_第3张图片

3输入输出参数(inout) 

mysql> create procedure proc5 (inout a int)  
    -> begin
    -> select a;
    -> set a=a+10;
    -> select a;
    -> end $$
delimiter ;

数据库存储过程_第4张图片

数据库存储过程_第5张图片

存储过程的控制语句 

 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 ;

数据库存储过程_第6张图片

数据库存储过程_第7张图片

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 ;

数据库存储过程_第8张图片

注意点:使用存储过程中,在内部变量不需要加@,外部使用和复制要加@,引用变量
              在存储过程begin之后声明变量:declare a INT;declare i INT;声明变量要加数据类 
              型。
               要想使用存储过程里面的结果,必须要out才能传出参数。在声明存储变量是,要 
               定义好参数的传参方式in out INOUT。

你可能感兴趣的:(数据库)