在触发器中处理ORA-01400异常

时间:2017-10-03 17:17:23

标签: oracle plsql

是否可以处理插入

  

null异常(ORA-01400)

NOT NULL内?

我的表中包含一些compound trigger列和insert。当我尝试null只有一个not nullBEFORE EACH ROW值的记录时,我发现了一个看起来像触发器不可见的错误。我无法以任何方式处理它。来自AFTER EACH ROW块的所有命令都被执行,EXCEPTION中的所有命令都不会执行来自{{1}}块的命令。

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;