几十个实用的PL/SQL(1)

这是我在 ACCP 学习的 QA ,觉得对初学者很有帮助,贴出。

----

第一阶段

Q. 编写一个 PL/SQL 程序块以显示所给出雇员编号的雇员的详细信息。

A.

DECLARE

erec emp%ROWTYPE;

BEGIN

SELECT * INTO erec FROM emp WHERE empno=& 雇员编号 ;

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

esal NUMBER;

eename emp.ename%TYPE;

BEGIN

SELECT (NVL(sal,0)+NVL(comm,0))*12,ename INTO esal,eename FROM emp WHERE empno=& 雇员编号 ;

DBMS_OUTPUT.PUT_LINE(eename || '''s Years Salary is ' || esal);

END;

/

Q. 按下列加薪比执行:

Deptno Raise(%age)

10 5%

20 10%

30 15%

40 20%

加薪的百分比是以他们现有的薪水为根据的。写一 PL/SQL 以对指定雇员加薪。

A.

DECLARE

vcounter NUMBER:=10;

vraise NUMBER;

BEGIN

LOOP

EXIT WHEN vcounter>40;

UPDATE emp set sal=NVL(sal,0)+NVL(sal,0)*0.05 WHERE deptno=vcounter;

vcounter:=vcounter+10;

END LOOP;

END;

/

Q. 编写一 PL/SQL 以向“ emp ”表添加 10 个新雇员编号。

(提示:如果当前最大的雇员编号为 7900 ,则新雇员编号将为 7901 到 7910 )

A.

DECLARE

vcounter NUMBER;

BEGIN

SELECT MAX(empno) INTO vcounter FROM emp;

FOR i IN 1..10

LOOP

vcounter:=vcounter+1;

INSERT INTO emp(empno) VALUES(vcounter);

END LOOP;

END;

/

Q. 只使用一个变量来解决实验课作业 4 。

A

DECLARE

erec emp%ROWTYPE;

-- vraise NUMBER;

BEGIN

SELECT * INTO erec

FROM emp

WHERE ename='&ename';

IF erec.job='CLERK' THEN

UPDATE emp SET sal=sal+500 WHERE empno=erec.empno;

ELSIF erec.job='SALESMAN' THEN

UPDATE emp SET sal=sal+1000 WHERE empno=erec.empno;

ELSIF erec.job='ANALYST' THEN

UPDATE emp SET sal=sal+1500 WHERE empno=erec.empno;

ELSE

UPDATE emp SET sal=sal+2000 WHERE empno=erec.empno;

END IF;

-- UPDATE emp SET sal=sal+vraise WHERE empno=erec.empno;

-- DBMS_OUTPUT.PUT_LINE(vraise);

END;

/

Q. 接受两个数相除并且显示结果。如果第二个数为 0 ,则显示消息“ DIVIDE BY ZERO ”。

A.

DECLARE

num1 NUMBER;

num2 NUMBER;

BEGIN

num1:=#

num2:=#

DBMS_OUTPUT.PUT_LINE(num1 || '/' || num2 || ' is ' || num1/num2);

EXCEPTION

WHEN ZERO_DIVIDE THEN

DBMS_OUTPUT.PUT_LINE('Didn''t your teacher tell you not to DIVIDE BY ZERO?');

END;

/

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus