- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课堂讨论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)