存储过程的基本使用(MySQL)

MySQL存储过程

创建存储过程(不带参)

DELIMITER$
CREATE PROCEDURE initData()
	-- 此处放置要执行的语句
	select 1 from dual;
BEGIN
END$

创建存储过程(带参)

DELIMITER$
create procedure initData(in in_param int)
	-- 此处放置要执行的语句
	select 1 from dual;
BEGIN
END$

查看创建过程

show create procedure initData;

查看数据库存储过程

show create procedure initData;

调用存储过程

-- 不带参数
CALL initData();

-- 带参数
set @in_param=1;
call initData(@in_param);

删除存储过程

drop procedure initData;

游标的使用

-- 定义变量
DECLARE idx int DEFAULT 0;
DECLARE temp_id varchar(64);
DECLARE temp_name varchar(64);
DECLARE temp_age varchar(64);
-- 定义游标
DECLARE cur CURSOR FOR select id, name, age  from table_name;
-- 设置没有数据返回时的标志                        
DECLARE CONTINUE HANDLER FOR NOT FOUND SET idx = 1;
-- 遍历游标
open cur;
    while idx <> 1
        do
            fetch report temp_id,temp_name ,temp_age ; 
            if idx <> 1 then   -- 防止循环多执行一次
                set process_id = (select replace(lower(uuid()), '-', ''));
                -- 执行业务逻辑
            end if;
        end while;
    -- 关闭游标
close cur ;

IF条件判断

IF
	temp_type = '1' 
THEN
	 -- 执行业务逻辑
ELSE
	 -- 执行业务逻辑
END IF;

IF ELSE条件判断

IF
	temp_type = '1' 
THEN
	 -- 执行业务逻辑
ELSEIF
	temp_type = '2' 
THEN
	 -- 执行业务逻辑
ELSEIF 
 	temp_type = '2' 
 THEN
    -- 执行业务逻辑
ELSE
	 -- 执行业务逻辑
END IF;

目前项目中使用到的就这些,后续还会继续补充

如果游标的循环中执行了select查询操作,为了避免select语句查询的结果集出现空,导致循环无法正常执行完成,则每执行一次查询都需要将idx设置为0,即

-- 定义变量
DECLARE idx int DEFAULT 0;
DECLARE temp_id varchar(64);
DECLARE temp_name varchar(64);
DECLARE temp_age varchar(64);
-- 定义游标
DECLARE cur CURSOR FOR select id, name, age  from table_name;
-- 设置没有数据返回时的标志                        
DECLARE CONTINUE HANDLER FOR NOT FOUND SET idx = 1;
-- 遍历游标
open cur;
    while idx <> 1
        do
            fetch report temp_id,temp_name ,temp_age ; 
            if idx <> 1 then   -- 防止循环多执行一次
                set process_id = (select replace(lower(uuid()), '-', ''));
                -- 执行业务逻辑
                select distinct id, name into temp_id,temp_name from test where name= '张三';
 				set idx = 0;
            end if;
        end while;
    -- 关闭游标
close cur ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值