簡體   English   中英

oracle12c中的審計觸發器正在錯誤編譯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM