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,所以它会抛出一个异常