mysql procedure

1. mysql procedure
定义一个存储过程 sp_search_customer2,p_nam是输入参数,p_cnt是返回参数
CREATE PROCEDURE sp_search_customer2(IN p_nam VARCHAR(20),out p_cnt int)
BEGIN
IF p_nam is null or p_nam = '' THEN
select * from customer;
ELSE
select * from customer where customer.nam LIKE p_nam;
end IF;
select FOUND_ROWS() INTO p_cnt;
END

call sp_search_customer2('',@num);
select @num ;

-- 调用存储过程
CALL sp_search_customer('丁%');

-- 查询 mysql 中所有的存储过程
SHOW PROCEDURE STATUS;
-- 查询 home 数据库中的 存储过程 (procedure)
SHOW PROCEDURE STATUS where Db = 'home';

-- 显示 存储过程的定义
show CREATE PROCEDURE sp_search_customer;

-- 删除存储过程
-- DROP PROCEDURE 存储过程名
DROP PROCEDURE sp_search_customer;

使用 FOUND_ROWS 函数取得前一条select语句检索出的记录条数。FOUND_ROWS函数取得记录数后使用 select ... into 命令将其设置到变量p_cnt中。
select ... into 命令用于将 select 语句中取得的结果设置到指定的变量中,语法如下:
select 列名1,... into 变量名1,... from 表名 where 语句等 ...;
但是请注意此处的select语句必须保证只检索出一条记录或一个值,也不能设置跨越多行的值。

if elseif else  结构 实现多重条件分支
CREATE PROCEDURE sp_search_customer3(in p_dept int)
begin
IF p_dept = 1 THEN
/**/
ELSEIF p_dept = 2 THEN
/**/
ELSEIF p_dept = 3 THEN
/**/
ELSE
/**/
end IF;
end

使用case命令实现多重条件分支
CREATE procedure sp_search_customer4(in p_dept int)
begin
DECLARE temp VARCHAR(20); -- 定义局部变量
CASE p_dept
WHEN 1 then
/**/
SET temp ='hello'; -- 给变量赋值
WHEN 2 then
/**/
SET temp ='hello1';
WHEN 3 then
/**/
SET temp ='hello2';
else
/**/
SET temp ='hello3';
end case
end

使用循环
-- 使用循环
create procedure sp_factorial(in p_num int,out p_result int)
begin
SET p_result = 1;
while p_num>1 do
set p_result = p_result*p_num;
set p_num = p_num-1;
end while;
end

call sp_factorial(5,@res);
select @res ;

-- 使用 repeat
create procedure sp_factorial2(in p_num int,out p_result int)
begin
set p_result = 1;
repeat
set p_result = p_result*p_num;
set p_num = p_num-1;
until p_num<=1 end repeat;
end

call sp_factorial2(5,@res);
select @res ;

转载于:https://my.oschina.net/hujunil1/blog/164975

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值