Oracle 存储过程exception异常处理大全及实例经典最终

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、一个实例Commit;create or replace procedure PROC_SUNHONGBO_MONCHNL(tim varchar2) is

timest varchar(8); timday varchar(33); sqlsql varchar(6666); no_result EXCEPTION; begin Commit; select to_char(sysdate,'yyyymmddHH24miss') tima into timday from dual;select

to_char(add_months(sysdate,-1),'yyyymm') mon into timest from dual;

dual; into timest from select tim mon

execute immediate 'delete report.wo_sunhongbo_chnl where mon = '||tim;

Commit;**********/如果有就抛出异常后继续执行、/*1添加所需要的列real_charge + time ,BEGINvarchar2(66)';real_charge'||tim||' add immediate 'alter table execute shiyw11.t_my EXCEPTION WHEN no_result THEN

DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');

WHEN OTHERS THEN

'||tim);!已经存在该列1:你的数据更新语句DBMS_OUTPUT.PUT_LINE('

END; execute immediate 'update shiyw11.t_my set real_charge'||tim||' = null'; Commit; Commit; dbms_output.put_line('timest:'||timest||';tim:'||tim||';timest:'||sqlsql); Commit; end PROC_SUNHONGBO_MONCHNL; / Commit;

主要内容如下:

1.1 异常处理概念1.1.1 预定义的异常处理1.1.2 非预定义的异常处理

1.1.3 用户自定义的异常处理

1.1.4 用户定义的异常处理

异常错误传播1.2

1.2.1 在执行部分引发异常错误1.2.2 在声明部分引发异常错误1.3 异常错误处理编程

1.4 在PL/SQL 中使用SQLCODE, SQLERRM异常处理函数

即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。任何ORACLE错误(报告为ORA-xxxxx形式的Oracle错误号)、PL/SQL运行错误或用户定义条件(不一写是错误),都可以。当然了,PL/SQL编译错误不能通过PL/SQL异常处理来处理,因为这些错误发生在PL/SQL程序执行之前。

ORACLE 提供异常情况(EXCEPTION)和异常处理(EXCEPTION HANDLER)来实现错误处理。

1.1 异常处理概念

异常情况处理(EXCEPTION)是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和自定义错误,由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会自动终止整个程序运行.

有三种类型的异常错误:错误( Predefined ).预定义1个。对这种异常情况的处理,无需在程序中定义,24ORACLE预定义的异常情况大约有自动将其引发。由ORACLE错误( Predefined )2.非预定义错误。对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE即其他标准的自动将其引发。ORACLE(User_define) 错误3.用户定义程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在

程序中定义,然后显式地在程序中将其引发。

结构为:PL/SQL 程序体的后半部,异常处理部分一般放在

EXCEPTION

WHEN first_exception THEN

WHEN second_exception THEN

WHEN OTHERS THEN

END;

异常处理可以按任意次序排列,但OTHERS 必须放在最后.

1.1.1 预定义的异常处理

预定义说明的部分ORACLE 异常错误

说明错误号异常错误信息名称违反了唯一性限制Dup_val_on_index ORA-0001

在等待资源时发生超时Timeout-on-resource ORA-0051

由于发生死锁事务被撤消Transaction-backed-out ORA-0061

对这种异常情况的处理,只需在PL/SQL块的异常处理部分,直接引用相应的异常情况名,并对其完成相应的异常错误处理即可。

;100,则加1500:更新指定员工工资,如工资小于1例

DECLARE

v_empno employees.employee_id%TYPE := &empno;

v_sal employees.salary%TYPE;

BEGIN

SELECT salary INTO v_sal FROM employees WHERE employee_id = v_empno;

IF v_sal<=1500 THEN

UPDATE employees SET salary = salary + 100 WHERE employee_id=v_empno;

!'); 员工工资已更新编码为 DBMS_OUTPUT.PUT_LINE(''||v_empno||' ELSE

!'); 员工工资已经超过规定值 DBMS_OUTPUT.PUT_LINE('编码为'||v_empno||' END IF;