您的位置:首页 > 数据库 > MySQL

mysql procedure

2013-09-28 02:04 2719 查看
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 ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql PROCEDURE