MySql存储过程

1.基本语法

CREATE PROCEDURE sel_emp(参数列表)
    BEGIN
     --操作
  END;

2.使用

复制代码

复制代码

无参的存储过程:
CREATE PROCEDURE sel_emp()
    BEGIN
     select * from emp where deptno = 10;
  END;
--存储过程的调用
call sel_emp();

有参的存储过程:
--根据部门编号查询员工信息
  CREATE PROCEDURE sel_emp2(dno int)
  BEGIN
    select * from emp where deptno=dno;
  END;
 --调用存储过程
  call sel_emp2(30);

--根据员工编号查询员工的名称
  CREATE PROCEDURE sel_emp3(eno int,OUT name varchar(20))
  BEGIN
    select ename into name from emp where empno=eno;
  end;
  --调用
  call sel_emp3(7788,@name);
  select @name;

--根据员工编号查询所在部门的编号
  CREATE PROCEDURE sel_emp4(INOUT eno int)
  BEGIN
    select deptno into eno from emp where empno = eno;
  END;
    
  --调用
  set @eno = 7788;
  call sel_emp4(@eno);
  select @eno;

--分支语句
CREATE PROCEDURE cal_score(score int)
        BEGIN
        -- 声明变量
        DECLARE levels varchar(20);
        -- 分支
                IF score >= 90 THEN
          -- 赋值
          set levels = '优秀';
        ELSEIF score >= 80  THEN
          set levels = '良好';
        ELSE
          set levels = '不通过';
        END IF;
        -- 输出
        select levels;
END;

--while循环
create PROCEDURE calc()
  BEGIN
    -- 声明两个变量
    DECLARE sum int;
    DECLARE count int;
    -- 初始化
    set sum = 0;
    set count = 1;
    -- 循环
    while count <=100 DO
      set sum = sum + count;
      set count = count + 1;
    END WHILE;

    SELECT sum;
  END;

  --LOOP
  create PROCEDURE calc1()
  BEGIN
    -- 声明两个变量
    DECLARE sum int;
    DECLARE count int;
    -- 初始化
    set sum = 0;
    set count = 1;
    -- 循环
   lip:LOOP
      set sum = sum + count;
      set count = count + 1;
      IF count > 100 THEN
        LEAVE lip;
      END IF;
   END LOOP;
    SELECT sum;
  END;
    
call calc1();

create PROCEDURE calc3()
  BEGIN
    -- 声明两个变量
    DECLARE sum int;
    DECLARE count int;
    -- 初始化
    set sum = 0;
    set count = 1;
    -- 循环
   REPEAT
      set sum = sum + count;
      set count = count + 1;
      UNTIL count > 100
   END REPEAT;
    SELECT sum;
  END;

  

复制代码

复制代码

3.参数模式

in:外部传进存储过程

out:传出

inout:传进传出

4.游标

复制代码

复制代码

--查询所有员工的姓名
  create PROCEDURE emp_cursor4()
  BEGIN
    DECLARE name varchar(20);
    DECLARE DONE boolean default 0;
    -- 声明游标类型变量存储所有员工的名称
    DECLARE emp_cursor CURSOR for select ename from emp;  
    -- 结束设置状态码为1  
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET DONE = 1;  
    -- 打开游标
    open emp_cursor;
    -- 获取游标中维护的值
    lip:LOOP
      FETCH emp_cursor into name;
      IF DONE THEN
        leave lip;
      END IF;
      select name;
    END LOOP;
    -- 关闭游标
    close emp_cursor;
  END;

复制代码

复制代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-ezra

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值