Oracle 数据库 练习题5

来源:互联网 发布:wow大脚插件for mac 编辑:程序博客网 时间:2024/06/05 05:04

一、完成以下PL/SQL

1. 求半径2米,高3米的圆柱体体积。

2. 求字符串abcdefg’的长度。

3. 显示pubs数据库中所有作家的au_lname的开头两个字母,大写显示。(字符函数)

4. 取字符串abcdefg’的第2到第5个字母。(字符函数)

5. 计算2001911日到今天已经多少天了。(日期函数)

6.  查询emp表,找出编号为7395的记录,如果名字为SCOTT显示“找到了”否则显示“没找到”。(if语句)

7.编写一个程序,用以接受用户输入的数字。将该数左右反转,然后显示反转后的数

提示:使用循环控制结构.

8.编写一个程序,在emp表中根据empno查询职员信息。如果代码引发NO_DATA_FOUND异常,则显示一则消息.

9.编写一个程序,用以接受用户输入的DEPTCODE,并从employee表中检索该雇员的EMPNO。如果代码引发TOO_MANY_ROWS异常,则显示消息“返回多行”.

--1.求半径2米,高3米的圆柱体体积。DECLARE V NUMBER(4):=3*3.14*2*2;BEGINdbms_output.put_line(V);END;--2.求字符串‘abcdefg’的长度。DECLAREV NUMBER(4);BEGINSELECT "LENGTH"('ABCDEFG') INTO V FROM DUAL;dbms_output.put_line(V);END;--3.显示pubs数据库中所有作家的au_lname的开头两个字母,大写显示。(字符函数)emp表里的所有员工名字改成第一个字母大写其他小写的形式declarename emp.ename%type;maxv number;i number :=1;rr number;beginselect count(*) into maxv from emp ;for i in 1..maxvloopselect m.v_name into name from(select rownum rn ,INITCAP(ENAME) v_name from emp ) m where m.rn=i;dbms_output.put_line(name);end loop;end;4.取字符串‘abcdefg’的第2到第5个字母。(字符函数)DECLAREV VARCHAR2(20);BEGINSELECT "SUBSTR"('ABCDEFG',2,4) INTO V FROM DUAL;dbms_output.put_line(V);END;5.计算2001年9月11日到今天已经多少天了。(日期函数)DECLAREV NUMBER(20);BEGINSELECT SYSDATE-TO_DATE('2001-09-11','yyyy-mm-dd') INTO V FROM DUAL;dbms_output.put_line(V);END;6.  查询emp表,找出编号为7395的记录,如果名字为SCOTT 显示“找到了”否则显示“没找到”。(if语句)第一种方法:先查名字DECLAREV EMP.EMPNO%type;BEGINSELECT EMPNO INTO V FROM EMP WHERE ENAME='SCOTT';IF(V=7395) THENdbms_output.put_line('找到了');ELSEdbms_output.put_line('没找到');END IF;END;第二种方法:报异常DECLAREV EMP.EMPNO%type;BEGINSELECT EMPNO INTO V FROM EMP WHERE ENAME='SCOTT';IF(V=7395) THENdbms_output.put_line('找到了');ELSEdbms_output.put_line('没找到');END IF;EXCEPTIONWHEN NO_DATA_FOUND THENdbms_output.put_line('没找到');END;7.编写一个程序,用以接受用户输入的数字。将该数左右反转,然后显示反转后的数提示:使用循环控制结构.DECLAREV VARCHAR2(20);M VARCHAR2(20);BEGINM:='&NUM';SELECT REVERSE(M) INTO V FROM DUAL;dbms_output.put_line(V);END;8.编写一个程序,在emp表中根据empno查询职员信息。如果代码引发NO_DATA_FOUND异常,则显示一则消息.DECLAREV EMP%ROWTYPE;BEGINSELECT * INTOV FROM EMPWHERE EMPNO=7369;--'&EMPNO'; dbms_output.put_line('编号:' || V.empno || '  姓名:' || V.ename ||                       '     职位:' || V.job || '    上级领导编号:' ||                       V.mgr || '     雇佣日期:' || V.hiredate ||                       '      工资:' ||V.sal || '     奖金:' ||                       V.comm || '  部门:' || V.deptno);EXCEPTIONWHEN NO_DATA_FOUND THENdbms_output.put_line('数据异常');END;9.编写一个程序,用以接受用户输入的DEPTCODE,并从employee表中检索该雇员的EMPNO。如果代码引发TOO_MANY_ROWS异常,则显示消息“返回多行”.DECLAREV EMP.EMPNO%TYPE;M VARCHAR2(20);BEGINSELECT EMPNO INTO V FROM EMPWHERE DEPTNO='&DEPTNO';EXCEPTIONWHEN TOO_MANY_ROWS THENdbms_output.put_line('返回多行');END;

注:以上答案是自己做得,结果正确,但是并不是按照正确答案写的。