文章摘要
这篇文章介绍了在数据库中使用`proc`(过程)来实现特定功能的代码示例。文章主要讲解了两种不同的`proc`创建方式:一种使用条件名(`proc22`),另一种使用条件码(`proc23`)。两种`proc`的功能相似,都是用于输入一个部门名,并查询该部门员工的编号、名字和薪资。它们都通过游标将查询结果集返回,并在没有找到结果时设置标记位。
文章详细描述了proc的结构,包括定义局部变量、声明游标、处理标记值以及关闭游标的步骤。最后,文章展示了如何调用这两个proc,分别使用 `'销售部'` 作为输入部门名。尽管proc的功能基本相同,但它们在标记值的定义和游标的声明方式上有所不同。
– 用条件名
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(‘销售部’);