在oracle中执行约束检查之前执行Trigger之后

时间:2010-04-20 05:51:40

标签: oracle triggers constraints

我在表T1上有After Insert / Update触发器,它从T2获取Col1的参考数据并完成一些工作并将其插入另一个表中。 col1与表T2的FK相同。

当用户将不正确或不存在的值插入Col1时,如果触发器被禁用,我会收到约束错误。

但是当启用触发器并且用户在Col1中插入错误的值时,触发器将被触发并显示“未找到数据”错误消息。

实际上我期望该表抛出约束错误,但触发器抛出它。

请告诉我您对此触发行为的评论。

2 个答案:

答案 0 :(得分:2)

您没有提到您是使用BEFORE还是AFTER触发器。请查看documentationorder of execution

  • BEFORE声明
  • 前排
  • 约束
  • AFTER行
  • AFTER声明

答案 1 :(得分:0)

我猜测触发器必须是BEFORE触发器。它将在检查约束之前运行。如果触发器引发NO_DATA_FOUND,则永远不会检查约束。如果触发器被禁用,则不会运行,因此会检查约束。