数据库入门PLSQL存储过程等题库

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一阶段Q.编写一个PL/SQL程序块以显示所给出雇员编号的雇员的详细信息。A.DECLAREerecemp%ROWTYPE;BEGINSELECT*INTOerecFROMempWHEREempno=&雇员编号;DBMS_OUTPUT.PUT_LINE('EmpNo'||''||'Ename'||''||'Job'||''||'Manager'||''||'HireDate'||''||'Salary'||''||'Commision'||''||'DeptNo');DBMS_OUTPUT.PUT_LINE(erec.ename||''||erec.job||''||erec.mgr||''||erec.hiredate||''||erec.sal||''||erec.comm||''||erec.deptno);END;/Q.编写一个PL/SQL程序块以计算某个雇员的年度薪水总额。A.DECLAREesalNUMBER;eenameemp.ename%TYPE;BEGINSELECT(NVL(sal,0)+NVL(comm,0))*12,enameINTOesal,eenameFROMempWHEREempno=&雇员编号;DBMS_OUTPUT.PUT_LINE(eename||'''sYearsSalaryis'||esal);END;/Q.按下列加薪比执行:DeptnoRaise(%age)105%2010%3015%4020%加薪的百分比是以他们现有的薪水为根据的。写一PL/SQL以对指定雇员加薪。A.DECLAREvcounterNUMBER:=10;vraiseNUMBER;BEGINLOOPEXITWHENvcounter40;UPDATEempsetsal=NVL(sal,0)+NVL(sal,0)*0.05WHEREdeptno=vcounter;vcounter:=vcounter+10;ENDLOOP;END;/Q.编写一PL/SQL以向emp表添加10个新雇员编号。(提示:如果当前最大的雇员编号为7900,则新雇员编号将为7901到7910)A.DECLAREvcounterNUMBER;BEGINSELECTMAX(empno)INTOvcounterFROMemp;FORiIN1..10LOOPvcounter:=vcounter+1;INSERTINTOemp(empno)VALUES(vcounter);ENDLOOP;END;/Q.只使用一个变量来解决实验课作业4。ADECLAREerecemp%ROWTYPE;--vraiseNUMBER;BEGINSELECT*INTOerecFROMempWHEREename='&ename';IFerec.job='CLERK'THENUPDATEempSETsal=sal+500WHEREempno=erec.empno;ELSIFerec.job='SALESMAN'THENUPDATEempSETsal=sal+1000WHEREempno=erec.empno;ELSIFerec.job='ANALYST'THENUPDATEempSETsal=sal+1500WHEREempno=erec.empno;ELSEUPDATEempSETsal=sal+2000WHEREempno=erec.empno;ENDIF;--UPDATEempSETsal=sal+vraiseWHEREempno=erec.empno;--DBMS_OUTPUT.PUT_LINE(vraise);END;/Q.接受两个数相除并且显示结果。如果第二个数为0,则显示消息DIVIDEBYZERO。A.DECLAREnum1NUMBER;num2NUMBER;BEGINnum1:=#num2:=#DBMS_OUTPUT.PUT_LINE(num1||'/'||num2||'is'||num1/num2);EXCEPTIONWHENZERO_DIVIDETHENDBMS_OUTPUT.PUT_LINE('Didn''tyourteachertellyounottoDIVIDEBYZERO?');END;/第二阶段Q.编写一个PL/SQL程序块,对名字以A或S开始的所有雇员按他们的基本薪水的10%加薪。A.DECLARECURSORc1ISSELECT*FROMempWHERESUBSTR(ename,1,1)='A'ORSUBSTR(ename,1,1)='S'FORUPDATEOFsal;BEGINFORiINc1LOOPUPDATEempSETsal=NVL(sal,0)+NVL(sal,0)*0.1WHERECURRENTOFc1;ENDLOOP;END;/Q.编写一PL/SQL,对所有的销售员(SALESMAN)增加佣金500.A.DECLARECURSORc1ISSELECT*FROMempWHEREjob='SALESMAN'FORUPDATEOFsal;BEGINFORiINc1LOOPUPDATEempSETsal=NVL(sal,0)+500WHERECURRENTOFc1;ENDLOOP;END;/Q.编写一PL/SQL,以提升两个资格最老的职员为高级职员。(工作时间越长,优先级越高)A.DECLARECURSORc1ISSELECT*FROMempWHEREjob='CLERK'ORDERBYhiredateFORUPDATEOFjob;--升序排列,工龄长的在前面BEGINFORiINc1LOOPEXITWHENc1%ROWCOUNT2;DBMS_OUTPUT.PUT_LINE(i.ename);UPDATEempSETjob='HIGHCLERK'WHERECURRENTOFc1;ENDLOOP;END;/Q.编写一PL/SQL,对所有雇员按他们基本薪水的10%加薪,如果所增加的薪水大于5000,则取消加薪。A.DECLARECURSORc1ISSELECT*FROMempFORUPDATEOFsal;BEGINFORiINc1LOOPIF(i.sal+i.sal*0.1)=5000THENUPDATEempSETsal=sal+sal*0.1WHERECURRENTOFc1;DBMS_OUTPUT.PUT_LINE(i.sal);ENDIF;ENDLOOP;END;/Q.显示EMP中的第四条记录。A.DECLARECURSORc1ISSELECT*FROMemp;BEGINFORiINc1LOOPIFc1%ROWCOUNT=4THENDBMS_OUTPUT.PUT_LINE(i.EMPNO||''||i.ENAME||''||i.JOB||''||i.MGR||''||i.HIREDATE||''||i.SAL||''||i.COMM||''||i.DEPTNO);EXIT;ENDIF;ENDLOOP;END;/第三阶段Q.使用REF游标显示EMP表中的值。A.DECLARETYPEemprectypISRECORD(EMPNOemp.empno%TYPE,ENAMEemp.ename%TYPE,JOBemp.job%TYPE,MGRemp.mgr%TYPE,HIREDATEemp.hiredate%TYPE,SALemp.sal%TYPE,COMMemp.comm%TYPE,DEPTNOemp.deptno%TYPE);TYPEemp_cursorISREFCURSORRETURNemp%ROWTYPE;vemp_curEMP_CURSOR;vemp_recEMPRECTYP;BEGINOPENvemp_curFORSELECT*FROMemp;LOOPFETCHvemp_curINTOvemp_rec;EXITWHENvemp_cur%NOTFOUND;DBMS_OUTPUT.PUT(vemp_rec.empno||''||vemp_rec.ename||''||vemp_rec.job);DBMS_OUTPUT.PUT(vemp_rec.mgr||''||vemp_rec.hiredate||''||vemp_rec.sal);DBMS_OUTPUT.PUT_line(vemp_rec.comm||''||vemp_rec.deptno);ENDLOOP;CLOSEvemp_cur;END;/Q.从EMP中获得值送到PL/SQL表,将PL/SQL表中的薪水值增加500,并向用户显示增加的薪水及其他详细信息。A.DECLARETYPEemprecISRECORD(EMPNOemp.empno%TYPE,ENAMEemp.ename%TYPE,JOBemp.job%TYPE,MGRemp.mgr%TYPE,HIREDATEemp.hiredate%TYPE,SALemp.sal%TYPE,COMMemp.comm%TYPE,DEPTNOemp.deptno%TYPE);iBINARY_INTEGER:=1;TYPEemp_tabISTABLEOFEMPRECINDEXBYbinary_integer;vempEMP_TAB;CURSORc1ISSELECT*FROMemp;BEGINFORxINc1LOOPvemp(i).empno:=x.empno;vemp(i).ename:=x.ename;vemp(i).job:=x.job;vemp(i).mgr:=x.mgr;vemp(i).hiredate:=x.hiredate;vemp(i).sal:=x.sal+500;vemp(i).comm:=x.comm;vemp(i).deptno:=x.deptno;i:=i+1;ENDLOOP;FORjIN1..i-1LOOPDBMS_OUTPUT.PUT(vemp(j).empno||''||vemp(j).ename||''||vemp(j).job);DBMS_OUTPUT.PUT(vemp(j).mgr||''||vemp(j).hiredate||''||vemp(j).sal);DBMS_OUTPUT.PUT_line(vemp(j).comm||''||vemp(j).deptno);ENDLOOP;END;/Q.一旦将值送到PL/SQL表后,尝试在PL/SQL表中插入新记录并且删除某些现有的记录。A.DECLARETYPEemprecISRECORD(EMPNOemp.empno%TYPE,ENAMEemp.ename%TYPE,JOBemp.job%TYPE,MGRemp.mgr%TYPE,HIREDATEemp.hiredate%TYPE,SALemp.sal%TYPE,COMMemp.comm%TYPE,DEPTNOemp.deptno%TYPE);iBINARY_INTEGER:=1;TYPEemp_tabISTABLEOFEMPRECINDEXBYbinary_integer;vempEMP_TAB;CURSORc1ISSELECT*FROMemp;BEGINFORxINc1LOOPvemp(i).empno:=x.empno;vemp(i).ename:=x.ename;vemp(i).job:=x.job;vemp(i).mgr:=x.mgr;vemp(i).hiredate:=x.hiredate;vemp(i).sal:=x.sal;vemp(i).comm:=x.comm;vemp(i).deptno:=x.deptno;i:=i+1;ENDLOOP;--FORjIN1..i-1--LOOP--DBMS_OUTPUT.PUT(vemp(j).empno||''||vemp(j).ename||''||vemp(j).job);--DBMS_OUTPUT.PUT(vemp(j).mgr||''||vemp(j).hiredate||''||vemp(j).sal);--DB

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功