[英]audit trigger in oracle12c is compiling with error
CREATE OR REPLACE TRIGGER EVA
AFTER INSERT ON C_EVALUATION
FOR EACH ROW
DECLARE
v_cid number(25);
v_isbn number(25);
v_cname VARCHAR2(50);
v_tittle VARCHAR2(150);
v_date date;
v_location VARCHAR2(50);
v_eva VARCHAR2(250);
BEGIN
v_cid:=:OLD.C_ID;
v_isbn:=:OLD.B_ISBN;
v_eva:=:OLD.e_desc;
SELECT C_NAME INTO v_cname FROM C_CUSTOMER WHERE C_ID = v_cid;
select l_date INTO v_date FROM C_LEND where c_id = v_cid;
select B_TITTLE INTO v_tittle FROM C_BOOK WHERE B_ISBN = v_isbn;
SELECT TOWN INTO v_location FROM COPY WHERE B_ISBN = v_isbn;
IF :NEW.R_ID IS NULL
THEN
INSERT INTO e_audit (
c_name,
b_tittle,
h_date,
location,
evaluation
) VALUES (
v_cname,
v_tittle,
v_date,
v_location,
v_eva
);
END IF;
END;
/
書表中給出了評價,但評價率應由客戶給出,如果客戶給出的值為空值,則以下觸發器應起作用。 但是,由於語句被忽略,表或視圖不存在,我們收到一條錯誤消息。 我檢查了兩次或更多次,但所有表名和ID都很完美。 請給我們解決錯誤的解決方案
這里還有其他問題。 這是一個INSERT觸發器,但是您指的是:OLD.e_desc。 錯了 INSERT觸發器應僅引用:NEW。 DELETE觸發器應僅引用:OLD,而UPDATE觸發器可以同時引用:NEW和:OLD。 :OLD給出更改前記錄的值,但是對於INSERT,沒有這樣的記錄。 我認為您真正想要的是使用:NEW.e_desc,:NEW.c_id和:NEW.b_isbn。 但是我猜了一點!
編輯
您的圖表沒有顯示所有字段嗎? 但是我認為您需要的是:
SELECT TOWN into v_location FROM copy inner join lend
ON lend.copyid = copy.copyid WHERE b_isbn = v_isbn
AND lend.c_id = v_cid
我在這里假設的是,借貸具有鏈接到copy.copyid的字段copyid,並且具有鏈接到客戶ID的字段。 我還假設該副本具有鏈接到書中的b_isbn的字段。 根據您的圖表,這必須全部正確,只是我不知道字段名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.