? 说明:在本训练中,使用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代码?
- SET?SERVEROUTPUT?ON? ??
- DECLARE??
- v_empno?NUMBER(5):=7788; ??
- emp_rec?emp%ROWTYPE; ??
- BEGIN??
- ?SELECT?*?INTO?emp_rec?FROM?emp?WHERE?empno=v_empno; ??
- ?DELETE?FROM?emp?WHERE?empno=v_empno; ??
- INSERT?INTO?emp1?VALUES?emp_rec; ??
- ?IF?SQL%FOUND?THEN??
- ??COMMIT; ??
- ??DBMS_OUTPUT.PUT_LINE(‘雇员复制成功!‘); ??
- ?ELSE? ??
- ??ROLLBACK; ??
- ??DBMS_OUTPUT.PUT_LINE(‘雇员复制失败!‘); ??
- ?END?IF; ??
- END;??
(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|