您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > plsql测试―参考答案
1、创建一个emp1表,其结构和数据与emp表完全一致。用游标完成操作:显示工资低于1500的职员信息,并显示如果给他们涨30%工资后的工资。createtableemp1asselect*fromemp;setserveroutputondeclarecursorcurisselect*fromempwheresal1500;beginforv_counterincurloopdbms_output.put_line(v_counter.empno||''||v_counter.ename||''||v_counter.mgr||''||v_counter.hiredate||''||v_counter.comm||''||v_counter.sal||''||v_counter.sal*1.3);endloop;end;2、编写一个pl/sql块,输出所有员工的员工名、员工号、工资和部门号。declarecursorc_empisselect*fromemp;beginforv_empinc_emploopdbms_output.put_line(v_emp.ename||''||v_emp.empno||''||v_emp.deptno||''||v_emp.sal);endloop;end;3、查询名为“smith”的员工信息,并输出其员工号、工资、部门号。如果该员工不存在,则插入一条新记录,员工号为2007,员工名为“smith”,工资为1500,部门号为10。如果存在多个名为“smith”的员工,则输出所有名为“smith”的员工号、工资和部门号。Declarev_empemp%rowtype;beginselect*intov_empfromempwhereename='smith';dbms_output.put_line(v_emp.empno||''||v_emp.sal||''||v_emp.deptno);exceptionwhenno_data_foundtheninsertintoemp(empno,ename,sal,deptno)values(2007,'smith',1500,10);whentoo_many_rowsthenforvin(select*fromempwhereename='smith')loopdbms_output.put_line(v.empno||''||v.sal||''||v.deptno);endloop;end;4、创建一个存储过程,以员工号为参数,输出该员工的工资。createorreplaceprocedureshowsal(p_empnoemp.empno%type)asv_salemp.sal%type;beginselectsalintov_salfromempwhereempno=p_empno;dbms_output.put_line(v_sal);end;beginshowsal(7844);end;5、创建一个函数,以部门号为参数,返回该部门的平均工资;createorreplacefunctionfun_avgsal(p_deptnoemp.deptno%type)returnemp.sal%typeasv_salemp.sal%type;beginselectavg(sal)intov_salfromempwheredeptno=p_deptno;returnv_sal;end;begindbms_output.put_line(fun_avgsal(10));end;6、创建一个函数,以员工号为参数,返回该员工所在部门的平均工资。createorreplacefunctionfun_sal(p_empnoemp.empno%type)returnemp.sal%typeasv_salemp.sal%type;beginselectavg(sal)intov_salfromempwheredeptno=(selectdeptnofromempwhereempno=p_empno);returnv_sal;end;begindbms_output.put_line(fun_sal(7844));end;7、在emp表上创建一个触发器,当插入、删除或修改员工信息时,统计各个部门的人数及平均工资,并输出。createorreplacetriggertrg_empafterinsertorupdateordeleteonempdeclarev_salemp.sal%type;v_countnumber;beginselectavg(sal),count(*)intov_sal,v_countfromemp;dbms_output.put_line(v_sal||''||v_count);end;updateempsetsal=500whereempno=7844;8、创建一个包,包含一个过程和一个游标。游标返回所有员工的信息,过程实现每次输出游标中的5条记录。createorreplacepackagepkg_persistcursorascursorc_empisselect*fromemp;proceduredisplayemp;end;createorreplacepackagebodypkg_persistcursorAsproceduredisplayempAsv_empemp%rowtype;beginifnotc_emp%isopenthenopenc_emp;endif;foriin1..5loopfetchc_empintov_emp;dbms_output.put_line(v_emp.empno||''||v_emp.ename);endloop;end;end;//beginpkg_persistcursor.displayemp;end;9、创建一个存储过程,以2个整数为参数,输出工资在两者间的员工信息。createorreplaceproceduresalbetween(minbinary_integer,maxbinary_integer)asbeginforv_empin(select*fromempwheresalbetweenminandmax)loopdbms_output.put_line(v_emp.empno||''||v_emp.ename||''||v_emp.job||''||v_emp.mgr||''||v_emp.hiredate||''||v_emp.sal||''||v_emp.comm||''||v_emp.deptno);endloop;end;beginsalbetween(1000,3000);end;10、在emp表上创建一个触发器,保证修改员工工资时,改后的工资低于同部门的最高工资,同时高于同部门的最低工资。createorreplacepackagepkg_deptnoasv_deptnoemp.deptno%type;v_salemp.sal%type;end;//createorreplacetriggertrg_updateempbeforeupdateonempforeachrowbeginpkg_deptno.v_sal:=:new.sal;pkg_deptno.v_deptno:=:new.deptno;end;//createorreplacetriggertrg_statementafterupdateonempdeclarev_highsalemp.sal%type;v_lowsalemp.sal%type;beginselectmax(sal),min(sal)intov_highsal,v_lowsalfromempwheredeptno=pkg_deptno.v_deptno;ifpkg_deptno.v_salv_highsalorpkg_deptno.v_salv_lowsalthenraise_application_error(-20001,'thesalisbeyond!');endif;end;updateempsetsal=500whereempno=7844;11、在emp表上创建一个触发器,当插入、删除或修改员工信息时,统计各个部门的人数及平均工资并输出。12、创建一个包,包含一个过程和一个函数。过程以部门号为参数输出该部门中工资最高的员工名和员工号,函数以部门号为参数返回该部门员工的最高工资。createorreplacepackagepkg_empasfunctionfunc_highsal(p_deptnoemp.deptno%type)returnemp.sal%type;procedureproc_highsal(p_deptnoemp.deptno%type);end;//createorreplacepackagebodypkg_empasfunctionfunc_highsal(p_deptnoemp.deptno%type)returnemp.sal%typeasv_highsalemp.sal%type;beginselectmax(sal)intov_highsalfromempwheredeptno=p_deptno;returnv_highsal;end;procedureproc_highsal(p_deptnoemp.deptno%type)asbeginforv_empin(select*fromempwheredeptno=p_deptnoandsal=func_highsal(p_deptno))loopdbms_output.put_line(v_emp.empno||''||v_emp.ename);endloop;end;end;//beginpkg_emp.proc_highsal(10);end;
本文标题:plsql测试―参考答案
链接地址:https://www.777doc.com/doc-5062544 .html