| Sql代码?? 说明:在本训练中,使用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表:?
 
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;?? (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |