EXCEPTION_INIT可以把自定的错误名称和Oracle内部错误号关联起来,这样就可以在程序异常处理部分按错误名称抛出异常。
需要注意,EXCEPTION_INIT命令必须在声明部分定义。下面是一个例子:
dept_bak表的deptno字段时number类型,长度为2,如果向的deptno中插入一个过长字段,比如9999,就会报错:
ORA-01438:value larger than specified precision allowed for this column.
为了代码的可读性,此处可以定义名为invalid_deptno的异常,当输入过长字段时把错误的数据插入到dept_t表中,下面是代码:
CREATE OR REPLACE PROCEDURE test_ins (p_deptno NUMBER,
p_deptname VARCHAR2,
p_loc VARCHAR2)
IS
invalid_deptno EXCEPTION;
PRAGMA exception_init(invalid_deptno,-1438);
BEGIN
INSERT INTO dept_bak VALUES (p_deptno,p_deptname,p_loc);
COMMIT;
EXCEPTION
WHEN invalid_deptno THEN
INSERT INTO dept_t VALUES (p_deptno,p_deptname,p_loc);
COMMIT;
END test_ins;