【发布时间】:2014-04-28 20:01:12
【问题描述】:
我正在做一项学校作业,我必须在所有 PL/SQL 中添加例外。由于我创建了一些序列和触发器来添加自动增量功能(这是 Oracle SQL),我想我应该为所有与 ORA-01400: cannot insert NULL into(...) 相关的触发器添加一个例外。
按照example here,我创建了一个包来存储我的自定义异常,因此我可以在所有实现自动增量的触发器中使用它:
CREATE OR REPLACE PACKAGE my_exceptions
AS
insert_null_into_notnull EXCEPTION;
PRAGMA EXCEPTION_INIT(insert_null_into_notnull, -1400);
END my_exceptions;
/
这是触发器之一:
CREATE OR REPLACE TRIGGER update_cust_id
BEFORE INSERT ON CUSTOMER
FOR EACH ROW
BEGIN
SELECT pk_cust_seq.NEXTVAL INTO :NEW.CUST_ID FROM DUAL;
EXCEPTION
WHEN my_exceptions.insert_null_into_notnull THEN
DBMS_OUTPUT.PUT_LINE('Attempted to insert a null value into not nullable column.');
RAISE;
END;
/
问题是当我尝试故意添加失败的插入时,我仍然得到典型的 Oracle 错误:ORA-01400: cannot insert NULL into (...),而不是我想要的 DBMS_OUTPUT。
我看了几次网站上的例子,看不出有什么区别,除了异常是用在过程中而不是触发器中。那是问题吗?如果是这样,我怎样才能使它在触发器中工作?
(OBS。这只是一个演示错误处理的学校练习;DBMS_OUTPUT 在这种情况下可能没有用,但这与本练习无关)
【问题讨论】:
标签: sql oracle exception-handling triggers