-- 存储过程
-- 执行带有逻辑的sql语句
-- 特点:存储过程保存在数据库服务器
-- 基本语法
-- 以$符号开始和结束
DELIMITER $
CREATE PROCEDURE pro_test()
BEGIN
SELECT * FROM student WHERE id = 1;
SELECT * FROM student WHERE id = 3;
END $
-- 调用存储过程
CALL pro_test();
-- 删除存储过程
DROP PROCEDURE pro_test;
-- (1)带有输入参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_test1(IN sid INT)
BEGIN
SELECT * FROM student WHERE id=sid;
END $
-- 定义会话变量
SET @sid = 2;
-- 调用存储过程
CALL pro_test1(@sid);
-- (2)带有输出参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_test2(OUT str VARCHAR(20))
BEGIN
-- 修改str的值
SET str = '输出参数';
END $
-- 定义会话变量
-- set @s='';
-- 调用存储过程
CALL pro_test2(@s);
-- 查询会话变量的值
SELECT @s;
-- (3)带有输入输出参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_test3(INOUT m INT)
BEGIN
-- 查看变量的值
SELECT m;
-- 修改变量的值
SET m = 999;
END $
-- 定义会话变量
SET @money = 100;
-- 调用存储过程
CALL pro_test3(@money);
-- 查询变量的值
SELECT @money;
-- (4)将查询的结果赋值给输出参数
DELIMITER $
CREATE PROCEDURE pro_test4(IN sid INT,OUT sname VARCHAR(10))
BEGIN
SELECT NAME INTO sname FROM student WHERE id=sid;
END $
-- 定义会话变量
SET @sid = 4;
-- 调用存储过程
CALL pro_test4(@sid,@sname);
-- 查询会话变量的值
SELECT @sname;
-- (5)带有条件判断的存储过程
-- 需求:编写一个存储过程,当n=1,输出'星期一',
-- 当n=2,输出'星期二'
-- 当n=3,输出'星期三',其他情况输出'其他情况'
DELIMITER $
CREATE PROCEDURE pro_test5(IN n INT,OUT str VARCHAR(20))
BEGIN
IF n=1 THEN
SET str = '星期一';
ELSEIF n=2 THEN
SET str = '星期二';
ELSEIF n=3 THEN
SET str = '星期三';
ELSE
SET str = '其他情况';
END IF;
END $
-- 定义会话变量
SET @n = 7;
-- 调用存储过程
CALL pro_test5(@n,@str);
-- 查询变量的值
SELECT @str;