oracle12c 中的审计触发器编译错误

audit trigger in oracle12c is compiling with error

refer my ER

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;
    /

书中table给出了评价,但是评价、评分应该由客户给出,如果客户给出的评分为空值,下面的触发器应该可以工作。但是我们收到一条错误消息,说语句被忽略,table 或视图不存在。我检查了两次或更多次,但所有 table 名称和 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

我在这里假设 lend 有一个字段 copyid 链接到 copy.copyid 并且它有一个字段链接到客户 ID。我还假设副本有一个链接到书中的 b_isbn 的字段。按照你的图,应该都是真的,就是不知道字段名。