使用Oracle EXCEPTION
抛出异常:
通过RAISE语句,用户自定义异常可以被显式抛出,预定义异常是当有关oracle错误产生时隐式抛出的。当与异常无关的某oracle错误产生时,也会产生异常。这种异常可以被OTHERS处理器捕获。预定义异常也可以通过RAISE语句显式抛出。异常抛出后就可以通过Exception when对异常进行处理。
通用异常处理:
EXCEPTION
WHEN OTHERS THEN
v_err_code := SQLCODE;
v_err_info := substr(SQLERRM, 1, 200);
dbms_output.put_line('ORA-' || v_err_code || ': ' || v_err_info);
oracle错误信息的最大长度为512字节,SQLCODE返回当前错误代码,SQLERRM返回当前错误信息(预定义的异常中包含了错误代码,dbms_output.put_line(v_err_info);)。SQLCODE和SQLERRM的值先赋给本地变量,然后才能用于SQL语句中,因为这些函数是过程化的,它们不能直接用于SQL语句中。
EXCEPTION_INIT编译指示:
这可以将自定义的异常与某特定oracle错误关联起来。通过这种方式就能够捕获这种特定错误,而不是通过OTHERS处理器。SQLCODE与SQLERRM将返回所发生的oracle错误的代码和消息文本,而不是返回1与"User-Defined Exception".
使用RAISE_APPLICATION_ERROR:
通过它可以创建自己的错误消息,比命名异常更具有描述性。
RAISE_APPLICATION_ERROR(error_number,error_message,[keep_error]);
error_number介于-20000~-20999之间,error_message错误消息文本,keep_error是一个boolean值。