從我讀過的關於觸發器及其工作原理的角度來看,我認爲這個觸發器將數據插入與我的表格phonenumber相關的關係中,然後再向其中插入值。我正在使用dbms_random創建一個不在用法表中的隨機5位數usageID(或至少這是我原先以爲會這樣做)。爲什麼這個觸發器不能正常工作?
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。 –