是否可以处理插入
null异常(ORA-01400)
在NOT NULL
内?
我的表中包含一些compound trigger
列和insert
。当我尝试null
只有一个not null
列BEFORE EACH ROW
值的记录时,我发现了一个看起来像触发器不可见的错误。我无法以任何方式处理它。来自AFTER EACH ROW
块的所有命令都被执行,EXCEPTION
中的所有命令都不会执行来自{{1}}块的命令。
答案 0 :(得分:0)
在插入每行的表格之前插入每个行的触发器
插入每行后触发 >>插入每行的表
如果INSERT由于ORA-01400或任何其他错误而失败,则不会到达AFTER INSERT,因此不会执行。对于触发器上的任何异常也是如此,因为在触发器执行期间但在插入本身期间没有引发异常
如果要在插入时处理NULL值,可以使用BEFORE INSERT触发器为列分配特定值(如果为null)
if :NEW.column_name is null then
:NEW.column_name := <value if null> -- you can also select from other table into :NEW.column_name
end if;
或者您可以在列
上使用默认值如果您希望触发器在列值为null时引发异常,则可以在检查后在BEFORE INSERT TRIGGER中引发异常
create or replace
trigger test_trigger
before insert on table1
for each row
is
custom_exception exception;
begin
if :NEW.column_name is null then
raise custom_exception;
end if;
exception
when custom_exception then
do something...
end;