以下のトリガーの実行に問題があります。
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関数)が、それを起動した文によって変更されている途中の表を調べ(または変更)しようとしました。
*アクション:トリガー(または関数)を書き直して、そのテーブルを読み取らないようにします。
テーブルReadingから詳細を取得することを想定していないということですか?
値を挿入しているときにテーブル読み取りからデータを取得すると、問題が発生すると思います。
SELECT SeqReadNo.CurrVal INTO varReadNo FROM DUAL;
Select MeterID INTO varMeterID
From Reading
Where ReadNo = varReadNo;
とにかくこれを解決することはありますか?または、これを行うためのより良い方法はありますか?ReadNoが挿入したReadNoを参照する必要があるテーブルReadingに入った後、テーブルBILLに新しい行を挿入する必要があります。