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都是完美的。请给我们解决方案,以解决错误
可能SELECT TOWN INTO v_location FROM COPY WHERE B_ISBN = v_isbn;是问题吗?在其他地方,你使用的是x_风格的前缀,但出于某种原因,你不适用于TOWN和COPY。另外你的插入有位置和评估没有前缀 –
真棒乔纳森,我犯了一个错误的表名。我们已经修复了它,非常感谢,触发器编译没有错误,但是当我们尝试给出空值评估时,我们得到一个错误,说'确切的读取返回的行数多于请求的行数','执行期间的错误'EVA''的触发器,所以我不知道如何解决这个问题,如果你能帮助我,我会很高兴 – Sazny14
我已经添加了答案 –