oracle——定义一个存储过程,可以接收部门号,返回该部门员工的姓名、工资和佣金
定义一个存储过程,可以接收部门号,返回该部门员工的姓名、工资和佣金
方案一:
create or replace procedure mydure(dno emp.deptno%type)
is
cursor mysor is select ename,sal,comm from emp where deptno=dno;
message mysor%rowtype;
begin
open mysor;
loop
fetch mysor into message;
exit when mysor%notfound;
dbms_output.put_line('员工姓名:' || message.ename || '工资:' || message.sal || '佣金:' || message.comm);
end loop;
close mysor;
end;
--调用:
declare
d_dno emp.deptno%type;
begin
mydure(d_dno);
end;
方案二:
create or replace procedure proc_2(pno emp.deptno%type,list_cur out sys_refcursor) --系统定义好的动态游标(引用游标)
is
begin
open list_cur for select ename,sal,comm from emp where deptno=pno;
end;
--调用
declare
pno emp.deptno%type:=&no;
mycur sys_refcursor;
type emp_rec is record(pname emp.ename%type,psal emp.sal%type,pconn emp.comm%type); -- 定义一个记录变量
list_rec emp_rec;
begin
proc_2(pno,mycur);
loop
fetch mycur into list_rec;
exit when mycur %notfound;
dbms_output.put_line(list_rec.pname|| ' ' ||list_rec.psal);
end loop;
end;