您的当前位置:首页Oracle实验游标与例外

Oracle实验游标与例外

2021-01-31 来源:爱问旅游网


成绩: 实 验 报 告

课程名称: 实验项目: 姓 名: 专 业: 班 级: 学 号:

Oracle数据库实用教程

游标与例外

计算机科学与技术

计算机科学与技术学院

年 月日

哈尔滨理工大学计算机科学与技术学院 实验报告

实验项目名称: 游标与例外

一、实验目的

掌握存储过程、函数的语法,可以用它解决具体问题。 编写存储过程、函数实现数据库操作的具体要求

二、实验内容

1、对INSERT、UPDATE、DELETE、SELECT等语句产生的隐式游标进行测试,读取并利用隐式游标的属性值

2、定义显式游标并用基本LOOP循环以及游标FOR循环语句对其进行处理,将游标对应记录值显示输出

3、使用游标更新记录,练习FOR UPDATE子句及WHERE CURRENT OF 条件 4、创建一个表并插入、删除、修改记录,测试引发并处理TOO_MANY_ROWS和NO_DATA_FOUND等预定义例外

5、自定义例外并通过插入或修改数据引发该例外,捕获并输出相应提示信息

6、捕获非Oracle预定义例外。对Oracle返回的某个错误号,进行捕获(参考错误处理手册,设计常用的错误处理例行程序)

7、使用RAISE_APPLICATION_ERROR返回自定义例外号和出错返回信息

三、实验截图与部分代码

1、用FOR循环处理游标。 CONN scott/wawawa@oooo DECLARE

v_bonus NUMBER;

CURSOR emp_cursor IS SELECT ename,sal,comm FROM emp; BEGIN

DELETE FROM bonus;

FOR emp_rec IN emp_cursor LOOP

v_bonus:= (emp_rec.sal*0.05)+(nvl(emp_rec.comm,0)*0.25); INSERT INTO BONUS(ename,sal,comm)

VALUES(emp_rec.ename,emp_rec.sal,v_bonus); END LOOP; COMMIT; END; /

哈尔滨理工大学计算机科学与技术学院实验教学中心 实验报告

2、按年度基本工资额用游标修改emp表中记录的sal字段值,如年基本工资低于30000,sal增加20%,否则sal增加15%。 CONN scott/wawawa@oooo DECLARE

v_sal NUMBER(7,2);

CURSOR emp_cur IS SELECT 12*sal FROM emp FOR UPDATE; BEGIN

OPEN emp_cur; LOOP

FETCH emp_cur INTO v_sal; EXIT WHEN emp_cur%NOTFOUND; IF v_sal<30000 THEN

UPDATE emp SET sal=sal*1.2 WHERE CURRENT OF emp_cur; ELSE

UPDATE emp SET sal=sal*1.15 WHERE CURRENT OF emp_cur; END IF; END LOOP;

CLOSE emp_cur; COMMIT; END; /

SET PAGESIZE 200 SET LINESIZE 100 SELECT * FROM emp;

哈尔滨理工大学计算机科学与技术学院实验教学中心 实验报告

3、预定义例外的捕获和处理。 CONN scott/wawawa@oooo CREATE TABLE test_msg( empno NUMBER(4),

message VARCHAR2(20));

SET serveroutput ON DECLARE

v_sal NUMBER; BEGIN

SELECT sal INTO v_sal FROM emp WHERE empno=888;

DBMS_OUTPUT.PUT_LINE('888的工资是:'||to_char(v_sal));

哈尔滨理工大学计算机科学与技术学院实验教学中心 实验报告

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('发生NO_DATA_FOUND例外'); INSERT INTO test_msg(empno,message) VALUES(888,'not exists'); COMMIT;

WHEN OTHERS THEN ROLLBACK WORK; END; /

4、删除指定编号的雇员,返回用户自定义的错误号和错误信息。

CONN hr/wawawa@oooo SET serveroutput ON SET verify OFF

DEFINE p_empno = 205 DECLARE

e_emps_remaining EXCEPTION;

PRAGMA EXCEPTION_INIT (e_emps_remaining,-2292); BEGIN

DELETE FROM employees

WHERE employee_id = &p_empno; IF SQL%NOTFOUND THEN

RAISE_APPLICATION_ERROR(-20001,

'指定的雇员编号'||TO_CHAR(&p_empno)||'不存在',TRUE); END IF; COMMIT; EXCEPTION

WHEN e_emps_remaining THEN

RAISE_APPLICATION_ERROR(-20002,'不能删除雇员:'

||TO_CHAR(&p_empno)||',还有记录参照该雇员编号',TRUE);

哈尔滨理工大学计算机科学与技术学院实验教学中心 实验报告

END; /

四、实验心得

通过实验课程加深了我对理论课程的理解、掌握、和运用。掌握了存储过程、函数的语法,可以用它解决具体问题,也掌握了编写存储过程、函数实现数据库操作的具体要求的技能,亲自实践很重要。

因篇幅问题不能全部显示,请点此查看更多更全内容