基本 Oracle 触发器不起作用

Posted

技术标签:

【中文标题】基本 Oracle 触发器不起作用【英文标题】:Basic Oracle trigger not working 【发布时间】:2016-04-06 20:37:05 【问题描述】:

我对 sql 非常缺乏经验,而且我有一个非常基本的触发器。基本上,我想确保在首次插入记录时将 TOTAL 设置为 0。总计是 NUMBER(9,2)

 create or replace trigger TOTAL_INIT before insert on BILL For each row
 Begin
   :NEW.TOTAL := 0;
 end;

当我插入时,它没有将 TOTAL 设置为 0,我不知道为什么。

【问题讨论】:

任何编译错误?可以通过执行select * from SYS.USER_ERRORS where NAME = 'TOTAL_INIT'获取编译错误。另外,您是否正在提交交易? 您的 BILL 表看起来如何?发布带有约束的创建脚本 SQL Developer 没有在触发器上显示任何错误,并且该查询没有返回任何内容。 由于各种原因,我无法展示我正在处理的表格的具体信息。这里的 BILL 表与我正在处理的情况类似。该列不可为空。数据默认设置为 0.00,没有其他触发器。该列没有其他限制。 如果表的默认值为 0 并且触发器在插入之前触发,那么这并不重要。不过,如果您要更新,那将很重要。列上的默认值就像之前的触发器一样执行,因此可能是它正在触发而您没有注意到。 TOTAL 是一个角色吗(我希望不是)? 【参考方案1】:

这个怎么样?

alter table bill modify total number(9, 2) default 0;

诚然,这完全不一样。您的代码将覆盖显式提供的值,而当未提供显式值时,这会将值设置为 0。

但是,您想要的功能可能不需要触发器。

【讨论】:

默认值已经是 0。我们希望这个触发器确保初始值始终为 0,而不管任何人试图放入什么。 人们是通过 SQL Plus 还是 SQL Developer 插入数据?如果它是纯程序化的,那么你应该不需要任何东西。 数据主要是通过 Web 应用程序插入的,但也可能有人通过 SQL Developer 通过脚本插入数据

以上是关于基本 Oracle 触发器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

触发器中的 ORACLE SQL 更新语句在 2 行后不起作用

Oracle Forms:预删除触发器中的警报不起作用

Vue - 将数据从孩子传递给父母 - 基本发射不起作用

为啥这个触发器不起作用?

为啥事件触发器在统一 2d 中不起作用?

MySql - 触发器不起作用 - 中止插入