SQL中的游标、异常处理、存储函数及总结(最新推荐)

  -- 用条件名

  use test_procedure ;

  -- 需求:输入一个部门名,查询该部门员工的编号、名字、薪资,将查询的结果集添加游标

  delimiter $$

  create procedure proc22(in in_name varchar(50))

  begin

  -- 定义局部变量

  declare var_empno int;

  declare var_ename varchar(50);

  declare var_sal decimal(7,2);

  -- 定义标记值

  declare flag int default 1;

  -- 声明游标

  declare my_cursor cursor for

  select empno ,ename ,sal from emp e,dept d where d.dname =in_name ;

  -- 定义句柄,当数据未发现时将标记位设置为0

  declare continue handler for not found set flag=0;

  -- 打开游标

  open my_cursor;

  -- 通过游标获得值

  label:loop

  fetch my_cursor into var_empno,var_ename,var_sal;

  if flag=1 then

  select var_empno,var_ename,var_sal;

  else

  leave label;

  end if;

  end loop label;

  -- 关闭游标

  close my_cursor;

  end $$

  delimiter ;

  call proc22('销售部');

  -- 用条件码

  use test_procedure ;

  -- 需求:输入一个部门名,查询该部门员工的编号、名字、薪资,将查询的结果集添加游标

  delimiter $$

  create procedure proc23(in in_name varchar(50))

  begin

  -- 定义局部变量

  declare var_empno int;

  declare var_ename varchar(50);

  declare var_sal decimal(7,2);

  -- 定义标记值

  declare flag int default 1;

  -- 声明游标

  declare my_cursor cursor for

  select empno ,ename ,sal from emp e,dept d where d.dname =in_name ;

  -- 定义句柄,当数据未发现时将标记位设置为0

  declare continue handler for 1329 set flag=0;

  -- 打开游标

  open my_cursor;

  -- 通过游标获得值

  label:loop

  fetch my_cursor into var_empno,var_ename,var_sal;

  if flag=1 then

  select var_empno,var_ename,var_sal;

  else

  leave label;

  end if;

  end loop label;

  -- 关闭游标

  close my_cursor;

  end $$

  delimiter ;

  call proc23('销售部');