分回退插入操作,然后显示相应的错误信息。
【训练2】 使用RAISE_APPLICATION_ERROR函数引发系统异常。 Sql代码
1. SET SERVEROUTPUT ON 2. DECLARE
3. New_no NUMBER(10); 4. BEGIN
5. New_no:=6789;
6. INSERT INTO emp(empno,ename) 7. VALUES(new_no, 'JAMES');
8. IF new_no<7000 THEN 9. ROLLBACK;
10. RAISE_APPLICATION_ERROR(-20001, '编号小于7000的下限!'); 11. END IF;
12. IF new_no>8000 THEN
13. ROLLBACK;
14. RAISE_APPLICATION_ERROR (-20002, '编号大于8000的下限!'); 15. END IF; 16. END;
执行结果为: Sql代码
1. DECLARE 2. *
3. ERROR 位于第 1 行:
4. ORA-20001: 编号小于7000的下限! 5. ORA-06512: 在line 9
说明:在本训练中,使用RAISE_APPLICATION_ERROR引发自定义异常,并以系统错误的方式进行显示。错误编号为20001和20002。
注意:同上一个训练比较,此种方法不需要事先定义异常,可直接引发。
可以参考下面的程序片断将出错信息记录到表中,其中,errors为记录错误信息的表,SQLCODE为发生异常的错误编号,SQLERRM为发生异常的错误信息。 DECLARE
v_error_code NUMBER;
v_error_message VARCHAR2(255); BEGIN ...
EXCEPTION ...
WHEN OTHERS THEN
v_error_code := SQLCODE ;
v_error_message := SQLERRM ; INSERT INTO errors
VALUES(v_error_code, v_error_message); END;
【练习1】修改雇员的工资,通过引发异常控制修改范围在600~6000之间。 阶段训练
【训练1】 将雇员从一个表复制到另一个表。 步骤1:创建一个结构同EMP表一样的新表EMP1:
CREATE TABLE emp1 AS SELECT * FROM SCOTT.EMP WHERE 1=2; 步骤2:通过指定雇员编号,将雇员由EMP表移动到EMP1表: Sql代码
1. SET SERVEROUTPUT ON 2. DECLARE
3. v_empno NUMBER(5):=7788; 4. emp_rec emp%ROWTYPE; 5. BEGIN
6. SELECT * INTO emp_rec FROM emp WHERE empno=v_empno; 7. DELETE FROM emp WHERE empno=v_empno; 8. INSERT INTO emp1 VALUES emp_rec; 9. IF SQL%FOUND THEN