一:异常
程序执行过程中出现错误情况被称为异常,主要有两种类型的异常:
-
系统定义的异常
-
用户定义的异常
二:系统定义的异常
Exception | Oracle Error | SQLCODE | 描述 |
---|---|---|---|
ACCESS_INTO_NULL | 06530 | -6530 | 为空对象赋值时引发 |
CASE_NOT_FOUND | 06592 | -6592 | 没有相应的选择语句时引发异常 |
COLLECTION_IS_NULL | 06531 | -6531 | 数组、集合未初始化却被使用时引发异常 |
DUP_VAL_ON_INDEX | 00001 | -1 | 当重复值试图被存储在具有唯一索引的列时被引发 |
INVALID_CURSOR | 01001 | -1001 | 游标操作异常 |
INVALID_NUMBER | 01722 | -1722 | 当一个字符串转换成一个数失败时引发 |
LOGIN_DENIED | 01017 | -1017 | 当使用无效的用户名或密码登录数据库时引发 |
NO_DATA_FOUND | 01403 | +100 | 当一个SELECT INTO语句无任何行返回时引发 |
NOT_LOGGED_ON | 01012 | -1012 | 在未连接到数据库却发出数据库调用时被引发 |
PROGRAM_ERROR | 06501 | -6501 | 当PL/SQL有一个程序内部错误时引发 |
ROWTYPE_MISMATCH | 06504 | -6504 | 当游标取值有不兼容的数据类型的变量被引发 |
SELF_IS_NULL | 30625 | -30625 | 当对象的成员方法被调用但对象类型的实例没有被初始化时引发异常 |
STORAGE_ERROR | 06500 | -6500 | 当PL/SQL内存不足或内存已损坏时引发异常 |
TOO_MANY_ROWS | 01422 | -1422 | 当SELECT INTO语句返回多行时引发异常 |
VALUE_ERROR | 06502 | -6502 | 算术、转换、截短或大小约束错误时引发 |
ZERO_DIVIDE | 01476 | 1476 | 0作除数时引发异常 |
三:用户自定义异常(其实就是声明一个异常变量)
DECLARE my-exception EXCEPTION;
四:手动抛出异常
DECLARE exception_name EXCEPTION; BEGIN IF condition THEN RAISE exception_name; END IF; EXCEPTION WHEN exception_name THEN statement; END;
五:异常处理
DECLARE <declarations section> BEGIN <executable command(s)> EXCEPTION //异常处理部分 WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statements WHEN exception3 THEN exception3-handling-statements ........ WHEN others THEN exception3-handling-statements END;