【发布时间】:2018-07-03 23:52:09
【问题描述】:
如果预订评估编号为 2,我正在尝试将客户名称、开始日期和船名输入审核表。当我使用的名称在预订表中时,我收到无效标识符错误。现在,我只是想在审计表中获取客户名称,因此在其他列中为空。
这是我的代码,我看不出哪里出错了:
CREATE OR REPLACE TRIGGER EVALUATION
BEFORE INSERT OR UPDATE OR DELETE ON BOOKING
FOR EACH ROW
WHEN (NEW.BOOKING_EVALUATION = 2)
DECLARE
custname VARCHAR(20);
sdate DATE;
shname VARCHAR(50);
BEGIN
SELECT CUSTOMER_NAME INTO custname FROM customer WHERE CUSTOMER_NAME = NEW.CUSTOMER_NAME;
IF INSERTING THEN
INSERT INTO EVALUATIONAUDIT (VOYAGES_ID,CUSTOMER_NAME,START_DATE,SHIP_NAME,BOOKING_EVALUATION)
VALUES(:NEW.VOYAGES_ID,custname,NULL,NULL,:NEW.BOOKING_EVALUATION);
END IF;
IF UPDATING THEN
INSERT INTO EVALUATIONAUDIT (VOYAGES_ID,CUSTOMER_NAME,START_DATE,SHIP_NAME,BOOKING_EVALUATION)
VALUES(:OLD.VOYAGES_ID,custname,NULL,NULL,:OLD.BOOKING_EVALUATION);
END IF;
IF DELETING THEN
INSERT INTO EVALUATIONAUDIT (VOYAGES_ID,CUSTOMER_NAME,START_DATE,SHIP_NAME,BOOKING_EVALUATION)
VALUES(:OLD.VOYAGES_ID,custname,NULL,NULL,:OLD.BOOKING_EVALUATION);
END IF;
END;
/
这是我得到的错误:
9/1 PL/SQL:忽略 SQL 语句
9/67 PL/SQL:ORA-00904:“新”。“客户名称”:无效标识符
【问题讨论】:
-
BOOKING表中有CUSTOMER_NAME列吗? -
不,它在客户表中,我在预订表中没有客户名称。
-
那么您不能在
BOOKING的触发器中使用NEW.CUSTOMER_NAME。 (即使您将缺少的:放在它前面。) -
我在预订表中有客户ID,但是当预订评估为2时,我需要将客户表中的客户名称添加到审计表中。
-
然后将获取客户名称的查询更改为使用 ID。
标签: oracle plsql database-trigger