课堂讨论3精要.ppt

课堂讨论3精要

1-* 成都信息工程大学 软件工程学院 成都信息工程大学 软件工程学院 课后思考 3 1、使用递归查询从emp获取指定编号的员工及其下属的所有信息 select * from emp start with empno=7782 connect by prior empno=mgr; 2、编写递归过程(不使用递归查询)输出指定编号的员工及其下属的所有信息 测试调用sql如下: call proc_getEmpsFormMgr(7839); create or replace procedure proc_getEmpsFormMgr (p_empno emp.empno%type) is v_emprec emp%rowtype; cursor cur_emp is select * from emp where mgr= p_empno; begin --1 获取当前编号对应员工信息 select * into v_emprec from emp where empno= p_empno; dbms_output.put_line(姓名是:||v_emprec.ename|| 工作是: ||v_emprec.job|| 工资是:||v_emprec.sal); --2 遍历当前员工的下属员工信息 for v_emprec in cur_emp loop proc_getEmpsFormMgr(v_emprec.empno);--递归调用 end loop; end proc_getEmpsFormMgr; 3、编写递归过程(不使用递归查询)获取指定编号员工的所有上级员工名称字符串 测试匿名块定义如下: declare v_empno emp.empno%type:=Empno; v_mgrnames varchar2(200):=; begin proc_getEmpMgrs(v_empno,v_mgrnames); if v_mgrnames= then dbms_output.put_line(指定员工没有上级管理人员); else dbms_output.put_line(指定员工上级管理人员为:||v_mgrnames); end if; end; create or replace procedure proc_getEmpMgrs (p_empno in emp.empno%type,p_mgrnames in out varchar2) is v_emprec emp%rowtype; v_mgrno emp.empno%type; v_mgrname emp.ename%type:=; begin --1 获取当前编号员工的管理员编号 select mgr into v_mgrno from emp where empno= p_empno; --2 如果当前有管理员,获取管理员信息 if v_mgrno is not null then select ename into v_mgrname from emp where empno= v_mgrno; if p_mgrnames is null or p_mgrnames= then p_mgrnames:=v_mgrname; else p_mgrnames:=p_mgrnames||,||v_mgrname; end if; --3 递归调用 proc_getEmpsForMgr(v_mgrno,p_mgrnames); end if; end proc_getEmpMgrs; 4、编写一个为职工普调工资的函数。 涨工资的方法是:工资低于1000元的职工,每人增加10%,工资大于或等于1000元的职工,每人增加5%。 函数调用时,输入工资总额限定金额。如果工资总额超过了限定金额,撤销所有涨工资的操作,返回0; 如果工资总额没有超过限定金额,返回工资总额。 (请使用游标和控制语句完成函数) 测试匿名块定义如下: declare v_sal_sum number:=0; v_sal_sum_max number:=工资总额限定金额:; begin v_sal_sum:=fun_UpSal(v_sal_sum_max); if v_sal_sum=0 then dbms_output.put

文档评论(0)

1亿VIP精品文档

相关文档