MySQL 存储过程

通过本文学习 MySQL 存储过程的语法和使用。

1 基本语法

CREATE OR REPLACE PROCEDURE 存储过程名 (
    -- in/out 参数名 参数类型
    in param1 varchar(32)out param2 varchar(32)
)
BEGIN
    -- 变量名 变量类型(取值范围)
    declare var1 varchar(32);
    declare var2 varchar(32) default '';
    
    -- 定义游标遍历时,作为判断是否遍历完全部记录的标记
    declare _done int default 0;
    -- 定义游标
    declare _pqList cursor for select o.`uid`,o.`name` from grid_org_org o where o.type='17';
    -- 定义处理程序,声明当游标遍历完全部记录后将标志变量置成某个值
    declare continue handler for not found set _done=1;
    
    -- 具体实现
END;

2 给变量赋值

-- 方法1
set var1='100';
-- 方法2
select col1,col2 into var1,var2 from test_tb;
-- 方法3
set @sqlStr='select count(*) from test_tb';  -- 构造 sql 赋值给一个变量(可以之前没有定义,但要以@开头)
prepare var1 from @sqlStr; -- 预处理需要执行的动态 sql ,其中 var1 是一个变量
execute var1;  -- 执行sql语句
deallocate prepare var1;     -- 释放掉预处理段

3 游标

3.1 cursor 型游标(不能用于参数传递

  • 赋值
-- 定义变量时赋值
declare var3 cursor for select col1 from temp_tb where id='1';
  • 遍历
open _pqList;
loop_label:loop
    fetch _pqList into var1,var2;
    if _done=1 then
        leave loop_label;
    end if;

    -- 具体操作	
    if var1 is not null and length(var1)>0 then

    end if;
end loop;
close _pqList;

4 实例

create or replace procedure p_test (
  in var1 varchar(32),-- 输入参数
  out var2 varchar(32)-- 输出普通参数
)
begin
  -- 输出普通参数
  select col1 into var2 from test_tb where id=var1;
  -- set var2='10';
  
  -- 输出结果集,可多个,不用作为参数传进来
  select * from test_tb where id='1';
  select * from test_tb where id='2';
end;


扫码关注微信公众号 程序员35 ,获取最新技术干货,畅聊 #程序员的35,35的程序员# 。独立站点:https://cxy35.com

posted @ 2020-03-14 09:55  程序员35  阅读(27)  评论(0)    收藏  举报