Oracle更新触发器在同一个表上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle更新触发器在同一个表上相关的知识,希望对你有一定的参考价值。

我想在更新同一个表中的某一行时更新字段data_aktualizacji。我创建了以下复合触发器。

CREATE OR REPLACE TRIGGER oferta_update_trigger
FOR UPDATE ON oferty
compound TRIGGER
  id_oferty number(10);

  AFTER EACH ROW IS
    BEGIN
      id_oferty := :new.idk;
  END AFTER EACH ROW;

  AFTER STATEMENT IS
    BEGIN
      UPDATE oferty SET data_aktualizacji = SYSDATE WHERE idk = id_oferty;
  END AFTER STATEMENT;
END;
/

当我想更新一些记录时,我收到以下错误。

SQL Error: ORA-00036: maximum number of recursive SQL levels (50) exceeded.

如何解决这个问题呢?我创建了一些循环,但我不知道,如何解决这个问题。

答案

更新oracle以将列更改为默认为sysdate

Alter table oferty alter column data_aktualizacji set default sysdate

根本不需要触发器

另一答案

正如Ctznkane525所写,你明确应该使用default-value来执行此操作。

如果你不想使用default,你可以修改new.data_aktualizacji

CREATE OR REPLACE TRIGGER oferty_update_aktualizacji
BEFORE INSERT OR UPDATE
ON oferty
FOR EACH ROW
DECLARE
BEGIN
   :new.data_aktualizacji:= sysdate;
END;

以上是关于Oracle更新触发器在同一个表上的主要内容,如果未能解决你的问题,请参考以下文章

oracle触发器自身表更新时,怎么拿到别的表字段数据更新自身表的某个字段?

关于oracle批量处理数据

Oracle 触发器检查一个表中的课程持续时间,如果课程是特定日期,则阻止更新

Oracle - 在没有触发器的情况下更新表时出现“表正在变异,触发器/函数可能看不到它”错误

oracle 触发器插入和更新时,怎么操作

Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段