Oracle ORA-04091:表正在变异,触发器/函数可能看不到它ORA-06512

Oracle ORA-04091:表正在变异,触发器/函数可能看不到它ORA-06512,oracle,triggers,insert,Oracle,Triggers,Insert,我创建了一个触发器,用于在另一个表上进行插入时在表中插入日志 这是触发器的代码: CREATE OR REPLACE TRIGGER scheme1.Inserting_Feed AFTER INSERT ON scheme2.payments FOR EACH ROW BEGIN INSERT INTO scheme2.db-logger(ID, TECHNOLOGY, WORKFLOW, NAME_EVENT, TIME_EVENT) VALUES(:NEW.i

我创建了一个触发器,用于在另一个表上进行插入时在表中插入日志

这是触发器的代码:

CREATE OR REPLACE TRIGGER scheme1.Inserting_Feed 
          AFTER INSERT ON scheme2.payments FOR EACH ROW
BEGIN
  INSERT INTO scheme2.db-logger(ID, TECHNOLOGY, WORKFLOW, NAME_EVENT, TIME_EVENT)
  VALUES(:NEW.id,'Repository','UP',(select repo.name 
                                      from scheme1.repository repo 
                                      join scheme2.payments pay 
                                        on repo.id = pay.repository_id
                                     where repo.id = NEW.repository_id), SYSDATE);
END;
我尝试运行此触发器,但在表payments上插入时,出现以下错误:

错误MT101-GENERAL_LOAD_错误:java.sql.SQLSyntaxErrorException: ORA-04091:表scheme1.payments正在发生变化,触发器/函数可能 看不到ORA-06512:“方案1.插入_提要”,第2行ORA-04088: 执行触发器“scheme1.Inserting_Feed”时出错


我的理解是,错误表明表正在更改,但触发器没有看到它。这是如何实现的?

为什么要在insert语句的子查询中加入scheme2.payments表?你就不能这样做:

CREATE OR REPLACE TRIGGER scheme1.inserting_feed
  AFTER INSERT
  ON scheme2.payments
  FOR EACH ROW
BEGIN
  INSERT INTO scheme2.db_logger (id,
                                 technology,
                                 workflow,
                                 name_event,
                                 time_event)
    VALUES      ( :new.id,
                  'Repository',
                  'UP',
                  (SELECT repo.name
                   FROM   scheme1.repository repo
                   WHERE  repo.id = :new.repository_id),
                  SYSDATE);
END;
/

在这段代码中,我在触发器插入中得到一个null值,我的字段不能为null,所以它会抛出一个异常