私がトリガーについて読んだことと、それがどのように働いているのかから、このトリガーは値を挿入した後に私のテーブルphonenumberに関連する関係にデータを挿入すると考えました。私はランダムに5桁のusageIDを作成するためにdbms_randomを使用しています。使用法のテーブルにはまだありません(またはatleastは私が思う通りです)。なぜこのトリガーは正常に動作しませんか?
create or replace TRIGGER addPhoneLine
AFTER INSERT ON phoneNumber
REFERENCING NEW AS NEW
FOR EACH ROW
DECLARE
primNum varchar(12);
acctNum numeric(5);
NEWusageID_new varchar(5);
BEGIN
if :new.primaryNumber is not NULL then
select acctID, primaryNumber into acctNum, primNum
from account A
where A.primaryNumber = :new.primaryNumber;
select to_char(round(dbms_random.value(10000, 99999),0)) into
NEWusageID_new from dual
minus
select usageID from usage;
INSERT INTO acct_num VALUES
(acctNum, primNum, :new.phonenumber);
INSERT INTO phone_usage VALUES
(NEWusageID_new, :new.phonenumber);
end if;
END;
しかし、私はのPhoneNumberテーブルに挿入しようとしたとき、それは次のエラーがスローされます。
のORA-01403:データが
ORA-06512見つかりませんでした。 "ADDPHONELINE" で、ライン9
ORA-04088:トリガーの実行中にエラー 'ADDPHONELINE'
関連するテーブルは、次のように作成されました:あなたが投稿エラーの説明に従って
create table phoneNumber(phoneNumber varchar(12) PRIMARY KEY, primaryNumber varchar(12));
create table acct_num(acctID numeric(5) references ACCOUNT, primaryNumber varchar(12) references ACCOUNT, phoneNumber varchar(12) references phoneNumber);
create table phone_usage(usageID varchar(5) references USAGE, phoneNumber varchar(12) references PHONENUMBER)
new.primaryNumberの値を確認するにはどうすればよいですか?私はそのクエリを:new.primaryNumberを私のプライマリナンバーとして挿入したものに置き換え、クエリがacctIDとprimaryNumberを返すようにしました。 – JR3652
@ JR3652例外処理で私の答えを更新しました。ログを記録する方法は、これを実行するためにどのツールを使用しているかによって異なります。最悪の場合、ログテーブルを作成し、new.primaryNumberというメッセージを挿入します。 –