我在执行下面的触发器时遇到了一些问题:
CREATE OR REPLACE TRIGGER AFTERINSERTCREATEBILL
AFTER INSERT
ON READING
FOR EACH ROW
DECLARE
varReadNo Int;
varMeterID Int;
varCustID Varchar(10);
BEGIN
SELECT SeqReadNo.CurrVal INTO varReadNo FROM DUAL;
Select MeterID INTO varMeterID
From Reading
Where ReadNo = varReadNo;
Select CustID INTO varCustID
From Address A
Join Meter M
on A.postCode = M.postCode
Where M.MeterID = varMeterID;
INSERT INTO BILL VALUES
(SEQBILLNO.NEXTVAL, SYSDATE, 'UNPAID' , 100 , varCustID , SEQREADNO.CURRVAL);
END;
错误信息:
*原因:触发器(或此语句中引用的用户定义的 plsql 函数)试图查看(或修改)正在被触发它的语句修改的表。
*操作:重写触发器(或函数),使其不读取该表。
这是否意味着我不应该从表格阅读中检索任何详细信息?
我相信当我在插入值时从表读取中检索数据时会出现问题:
SELECT SeqReadNo.CurrVal INTO varReadNo FROM DUAL;
Select MeterID INTO varMeterID
From Reading
Where ReadNo = varReadNo;
反正有办法解决这个吗?还是有更好的方法来做到这一点?进入表 Reading 后,我需要在表 BILL 中插入一个新行,其中 ReadNo 需要引用我刚刚插入的 ReadNo。