首页 > 数据库技术 > 详细

MySql存储过程

时间:2019-01-21 20:54:49      阅读:218      评论:0      收藏:0      [点我收藏+]

学习sql的存储过程,笔记总结如下:

 

MySQL默认将分号,即“;”作为语句的分隔符。如果是这样的话,则一个存储过程将很难正常创建,因为它的BEGIN和END之间可以是任意数量的SQL语句,而每条SQL语句都以分号结束。所以,在创建存储过程时,必须重新定义分隔符。在创建完存储过程后,必须重新设置回原来的分隔符“;”。

 

1. 创建普通存储过程的基本格式

-- 创建存储过程
DELIMITER $   -- 声明存储过程的结束符   
create procedure pro_test()
begin 
    -- 可以写多个sql
    select * from admin where id = 1;
    select * from user limit 5;
end $

 

2. 调用和删除存储过程

-- 调用存储过程
call pro_test();

-- 删除存储过程
drop procedure pro_test;  -- 注意:不是pro_test()

 

3. 存储过程的参数说明

IN:表示参数从外部传入到存储过程内部使用

OUT:表示参数从过程里边把数据保存到变量中,交给外部使用,所有传入的必须是变量。如果说传入的out变量本身在外部有数据,那么在进入过程之后,第一件事就是被清空,设为null

INOUT:数据可以从外部传入到过程内部使用,同事内部操作之后,又会将数据返回给外部。

 

4. 创建带有输入参数的存储过程

delimiter $
    create procedure pro_find(IN aid int)
begin
    select * from admin where id = aid;
end $

-- 调用
call pro_find(3);

 

5. 创建带有输出参数的存储过程

delimiter $
create procedure pro_testout(out str varchar(20))
begin
    set str = "test out";
end $

-- 调用
call pro_testout(@word);

-- 查看变量值
select @word;

 

6. 创建带有输入输出参数的存储过程

delimiter $
create procedure pro_testinout(inout n int)
begin
    select n ;
    set n = 500;
end $

-- 调用
set @n = 10;
call pro_testinout($n);

-- 查看
select $n

 

7. 创建带有条件判断的存储过程

delimiter $
create procedure pro_testif(in num int, out str varchar(20))
begin
    if num = 1 then
        set str = 周一;
    elseif num =2 then
        set str = ‘‘;
    elseif num = 3 then
        set str = ‘‘;
    else
        set str = ‘‘;
    end if;
end $

call pro_testif(5, @str);

select @str;

 

8. 创建带有循环功能的存储过程

delimiter $
create procedure pro_testwhile(in num int, out result int)
begin
    declare i int default 1;
    declare vsum int default 0;
    while i <= num do
        set vsum = vsum + i;
        set i = i + 1;
    end while;
    set result = vsum;
end $

call pro_testwhile(50, @result);

select @result;

 

9. 使用查询结果赋值给变量(into)

delimiter $
create PROCEDURE pro_find(in aid int, out uname varchar(20))
begin
    select username into uname from staff where id = aid;
end $

-- 调用
call pro_find(2, @name);

select @name;

 

10. 删除存储过程

drop procedure pro_find;

 

MySql存储过程

原文:https://www.cnblogs.com/iverson-3/p/10300638.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!