实验三 PLSQL编程基础

上传人:野鹰 文档编号:2631451 上传时间:2017-07-26 格式:DOC 页数:4 大小:39KB
返回 下载 相关 举报
实验三 PLSQL编程基础_第1页
第1页 / 共4页
实验三 PLSQL编程基础_第2页
第2页 / 共4页
实验三 PLSQL编程基础_第3页
第3页 / 共4页
实验三 PLSQL编程基础_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《实验三 PLSQL编程基础》由会员分享,可在线阅读,更多相关《实验三 PLSQL编程基础(4页珍藏版)》请在金锄头文库上搜索。

1、实验三 PL/SQL 编程基础 开发语言及实现平台或实环境 Oracle 11g 实验目的 (1) 掌握 PL/SQL 块结构、PL/SQL 的基本语法、PL/SQL 的控制结构。 (2) 掌握 PL/SQL 块中使用复合数据类型。 (3) 掌握 PL/SQL 异常处理技术。 实验要求 (1) 记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。 (2) 记录利用 SQL*Plus 或 iSQL*Plus 编写、执行 PL/SQL 程序的命令。 实验内容 运行 1.2.3 中的程序,查看运行结果,体会 pl/sql 语句的语法结构和运行结果。完成 4.5.6.及 7.8 中任选

2、一个中的代码的编写。1 利用 LOOP 循环方式计算 1+3+5+7+9。代码如下: SET SERVEROUTPUT ON DECLARE i NUMBER; sum1 NUMBER; BEGIN i:=1; sum1:=0; LOOP IF mod(i,2)!=0 THEN sum1:=sum1+i; END IF; i:=i+1; IF(i9) THEN EXIT; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(sum1); END; 2.利用记录类型将 emp 表的某条信息显示出来。代码如下: SET SERVEROUTPUT ON DECLAREE_n

3、ame emp.ename%type;E_no emp.empno%type;E_sal emp.sal%type;E_deptno emp.deptno%type;E_hiredate emp.hiredate%type;BEGINselect empno,ename,hiredate,sal,deptno INTO E_no,E_name,E_hiredate,E_sal , E_deptno FROM emp WHERE empno=7788; DBMS_OUTPUT.PUT_LINE(E_no|E_name | E_hiredate | E_sal | E_deptno);end;/请

4、利用%rowTYPE 重做本例,注意三者的差别。 3.检索工资大于 700 的员工工资并输出,同时对可能发生的异常进行处理。declarev_sal emp.sal%type;beginselect sal into v_sal from emp where sal=700;exceptionwhen no_data_found thendbms_output.put_line(no data!);when too_many_rows thendbms_output.put_line(too many row);when others thennull;end;/ 4.编写 PL/SQL 程序

5、块,完成如下功能:检查 SCOTT 用户下 emp 表中某个员工的工资是否在规定范围内。不同职位的工资范围为:clerk 为 15002500,salesman 为 8005000,manger 为 30004500,analyst 为 25003500,对 president 的工资不做限定。5.用循环语句来实现将 1 到 50,50 个数输入到某个表中。6.系统的自定义异常查询某个部门的平均工资,如果此工资没有在 20003000 之间,触发自定义异常,请编写 PL/SQL 来处理此异常。并输出“此部门的平均工资不在 2k 到 3k之间” 。 如果你能给此自定义异常分配一个异常号,及异常名

6、(昵称) ,那自然是极好的。如果不能,那样没关系。7.以 emp 表编写 PL/SQL 程序块 ,使程序符合如下要求: (1)用替换变量 p_salary 提供要查找的工资值。(2)如果与给定工资相符的雇员有多个,捕获该例外并向 message 表中插入一个值为“more than one employee with a salary of .”的记录。(3)如果没有与给定工资相符的雇员,捕获该例外并向 message 表中插入一条值为“no employee with a salary of .”的记录。(4)如果恰有一个雇员的工资 salary 与给定工资相符,将雇员的名字和工资数连接在一

7、起作为一条记录插入 message 表。(5)对于其他例外情形,向 message 表中插入一条“some other error occurred”。8. 以 dept 表编写 PL/SQL 程序块,使程序符合如下要求:向 dept 表中插入一条记录,进行一场异常,如果部门名不是以a开头的,触发异常,显示消息“部门名应以 a 开头“,向表中插入重复的关键字,触发异常,则显示消息“对不起无法插入:该部门编号已存在” 。 系统非预定义异常declaree_integrity exception;-1 定义一个例外类型变量;pragma exception_init(e_integrity,-22

8、91);-2 告诉编译器根据 oracle 的错误代码相对应的意外。beginupdate emp set deptno=&dno where empno=&eno;exceptionwhen e_integrity then -3 捕获意外并处理dbms_output.put_line(该部门号不存在);常见问题分析 1测试 PL/SQL 的方法 与其他语言(C/C+等)相比,PL/SQL 的测试有其不同之处,归纳下来有 3 种方法: (1) 使用 DBMS_OUTPUT 包的 PUT_LINE 方法来显示中间变量,以此来观察程序是否存在逻辑错误。 (2) 插入测试表的方法,即创建一个临时的

9、中间表,然后把所有涉及到的中间变量的结果都作为记录插入到中间表中,这样可以通过查询表中的结果来观察程序的执行情况。 (3) 使用异常处理手段,对可疑的程序段使用 BEGIN END,然后可以在 EXCEPTION 里进行异常捕获处理。 2如何获取 PL/SQL 的错误消息 Oracle 提供了内置函数 SQLCODE 和 SQLERRM 是特别用在 OTHERS处理器中,分别用来返回 Oracle 的错误代码和错误消息。OTHERS 处理器是异常处理块中最后的异常处理器,因为它是用来捕获除了别的异常处理器处理以外的所有的 Oracle 异常,所以在程序的最外层使用一个 OTHERS 处理器的话

10、,将可以确保所有的错误都会被检测到。 在一个预定义的异常中,SQLCODE 返回 Oracle 错误的序号,而 SQLERRM 返回的是相应的错误消息,错误消息首先显示的是错误代码。SQLCODE 返回的是负数,除非 Oracle 的错误为 “ORA-01403: NO DATA FOUND (即未找到数据 )”,当 Oracle 的错误为“ORA-01403:NO DATA FOUND”时,其对应的 SQLCODE 为+100。对于用户自定义的异常,SQLCODE 返回的是+1,而 SQLERRM 返回的是“User-Defined Exception”。一个 Oracle 的错误消息最多只能包含 512 个字节的错误代码。如果没有异常被触发,则 SQLCODE 返回 0, SQLERRM 返回“ORA-0000:normal, successful completion”。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号