<script type="text/javascript">
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
第一阶段
Q.编写一个 PL/ SQL程序块以显示所给出雇员编号的雇员的详细信息。
A.
DECLARE
erecemp%ROWTYPE;
BEGIN
SELECT*INTOerecFROMemp WHEREempno=&雇员编号;
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.
DECLARE
esalNUMBER;
eenameemp.ename%TYPE;
BEGIN
SELECT(NVL(sal,0)+NVL(comm,0))*12,enameINTOesal,eenameFROMempWHEREempno=&雇员编号;
DBMS_OUTPUT.PUT_LINE(eename||'''sYearsSalaryis'||esal);
END;
/
Q.按下列加薪比执行:
Deptno Raise(%age)
10 5%
20 10%
30 15%
40 20%
加薪的百分比是以他们现有的薪水为根据的。写一 PL/ SQL以对指定雇员加薪。
A.
DECLARE
vcounterNUMBER:=10;
vraiseNUMBER;
BEGIN
LOOP
EXITWHENvcounter>40;
UPDATEempsetsal=NVL(sal,0)+NVL(sal,0)*0.05 WHEREdeptno=vcounter;
vcounter:=vcounter+10;
ENDLOOP;
END;
/
Q.编写一 PL/ SQL以向"emp"表添加10个新雇员编号。
(提示:如果当前最大的雇员编号为7900,则新雇员编号将为7901到7910)
A.
DECLARE
vcounterNUMBER;
BEGIN
SELECTMAX(empno)INTOvcounterFROMemp;
FORiIN1..10
LOOP
vcounter:=vcounter+1;
INSERTINTOemp(empno)VALUES(vcounter);
ENDLOOP;
END;
/
Q.只使用一个变量来解决实验课作业4。
A
DECLARE
erecemp%ROWTYPE;
-- vraiseNUMBER;
BEGIN
SELECT*INTOerec
FROMemp
WHEREename='&ename';
IFerec.job='CLERK'THEN
UPDATEempSETsal=sal+500WHEREempno=erec.empno;
ELSIFerec.job='SALESMAN'THEN
UPDATEempSETsal=sal+1000WHEREempno=erec.empno;
ELSIFerec.job='ANALYST'THEN
UPDATEempSETsal=sal+1500WHEREempno=erec.empno;
ELSE
UPDATEempSETsal=sal+2000WHEREempno=erec.empno;
ENDIF;
-- UPDATEempSETsal=sal+vraiseWHEREempno=erec.empno;
-- DBMS_OUTPUT.PUT_LINE(vraise);
END;
/
Q.接受两个数相除并且显示结果。如果第二个数为0,则显示消息"DIVIDEBYZERO"。
A.
DECLARE
num1NUMBER;
num2NUMBER;
BEGIN
num1:=#
num2:=#
DBMS_OUTPUT.PUT_LINE(num1||'/'||num2||'is'||num1/num2);
EXCEPTION
WHENZERO_DIVIDETHEN
DBMS_OUTPUT.PUT_LINE('Didn''tyourteachertellyounottoDIVIDEBYZERO?');
END;
/
第二阶段
Q.编写一个 PL/ SQL程序块,对名字以"A"或"S"开始的所有雇员按他们的基本薪水的10%加薪。
A.
DECLARE
CURSORc1IS
SELECT*FROMempWHERESUBSTR(ename,1,1)='A'ORSUBSTR(ename,1,1)='S'FORUPDATEOFsal;
BEGIN
FORiINc1
LOOP
UPDATEempSETsal=NVL(sal,0)+NVL(sal,0)*0.1WHERECURRENTOFc1;
ENDLOOP;
END;
/
Q.编写一 PL/ SQL,对所有的"销售员"(SALESMAN)增加佣金500.
A.
DECLARE
CURSORc1IS 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
第一阶段
Q.编写一个 PL/ SQL程序块以显示所给出雇员编号的雇员的详细信息。
A.
DECLARE
erecemp%ROWTYPE;
BEGIN
SELECT*INTOerecFROMemp WHEREempno=&雇员编号;
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.
DECLARE
esalNUMBER;
eenameemp.ename%TYPE;
BEGIN
SELECT(NVL(sal,0)+NVL(comm,0))*12,enameINTOesal,eenameFROMempWHEREempno=&雇员编号;
DBMS_OUTPUT.PUT_LINE(eename||'''sYearsSalaryis'||esal);
END;
/
Q.按下列加薪比执行:
Deptno Raise(%age)
10 5%
20 10%
30 15%
40 20%
加薪的百分比是以他们现有的薪水为根据的。写一 PL/ SQL以对指定雇员加薪。
A.
DECLARE
vcounterNUMBER:=10;
vraiseNUMBER;
BEGIN
LOOP
EXITWHENvcounter>40;
UPDATEempsetsal=NVL(sal,0)+NVL(sal,0)*0.05 WHEREdeptno=vcounter;
vcounter:=vcounter+10;
ENDLOOP;
END;
/
Q.编写一 PL/ SQL以向"emp"表添加10个新雇员编号。
(提示:如果当前最大的雇员编号为7900,则新雇员编号将为7901到7910)
A.
DECLARE
vcounterNUMBER;
BEGIN
SELECTMAX(empno)INTOvcounterFROMemp;
FORiIN1..10
LOOP
vcounter:=vcounter+1;
INSERTINTOemp(empno)VALUES(vcounter);
ENDLOOP;
END;
/
Q.只使用一个变量来解决实验课作业4。
A
DECLARE
erecemp%ROWTYPE;
-- vraiseNUMBER;
BEGIN
SELECT*INTOerec
FROMemp
WHEREename='&ename';
IFerec.job='CLERK'THEN
UPDATEempSETsal=sal+500WHEREempno=erec.empno;
ELSIFerec.job='SALESMAN'THEN
UPDATEempSETsal=sal+1000WHEREempno=erec.empno;
ELSIFerec.job='ANALYST'THEN
UPDATEempSETsal=sal+1500WHEREempno=erec.empno;
ELSE
UPDATEempSETsal=sal+2000WHEREempno=erec.empno;
ENDIF;
-- UPDATEempSETsal=sal+vraiseWHEREempno=erec.empno;
-- DBMS_OUTPUT.PUT_LINE(vraise);
END;
/
Q.接受两个数相除并且显示结果。如果第二个数为0,则显示消息"DIVIDEBYZERO"。
A.
DECLARE
num1NUMBER;
num2NUMBER;
BEGIN
num1:=#
num2:=#
DBMS_OUTPUT.PUT_LINE(num1||'/'||num2||'is'||num1/num2);
EXCEPTION
WHENZERO_DIVIDETHEN
DBMS_OUTPUT.PUT_LINE('Didn''tyourteachertellyounottoDIVIDEBYZERO?');
END;
/
第二阶段
Q.编写一个 PL/ SQL程序块,对名字以"A"或"S"开始的所有雇员按他们的基本薪水的10%加薪。
A.
DECLARE
CURSORc1IS
SELECT*FROMempWHERESUBSTR(ename,1,1)='A'ORSUBSTR(ename,1,1)='S'FORUPDATEOFsal;
BEGIN
FORiINc1
LOOP
UPDATEempSETsal=NVL(sal,0)+NVL(sal,0)*0.1WHERECURRENTOFc1;
ENDLOOP;
END;
/
Q.编写一 PL/ SQL,对所有的"销售员"(SALESMAN)增加佣金500.
A.
DECLARE
CURSORc1IS 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>