数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
几十个实用的PL/SQL(1)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

这是我在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,则新雇员编号将为79017910

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;

/




相关文章

相关软件