我一直在研究一個資料庫,該資料庫存盤了有關旅行和這些旅行預訂的資料。我還有一個表 ReservationLog,它存盤給定預訂狀態的變化,以及它們發生的時間。我被告知要創建一個觸發器,在添加新預訂后作業,這也會在 ReservationLog 表中創建一個新條目。但是,在嘗試編譯代碼時出現錯誤:
PLS-00049 - incorrect binding variable "NEW.LOG_DATE"
表 ReservationLog 看起來像這樣:
CREATE TABLE RESERVATIONLOG
(
ID INT GENERATED ALWAYS AS IDENTITY NOT NULL,
RESERVATION_ID INT,
LOG_DATE DATE,
STATUS CHAR(1),
CONSTRAINT RL_PK PRIMARY KEY
(
ID
)
ENABLE
);
RESERVATION_ID is a foreign key
觸發函式的代碼如下所示:
CREATE OR REPLACE TRIGGER AddReservationTrigger
AFTER INSERT ON
RESERVATION
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE V_TODAY DATE;
BEGIN
SELECT SYSDATE INTO V_TODAY FROM DUAL;
INSERT INTO RESERVATIONLOG
(
RESERVATION_ID,
LOG_DATE,
STATUS
)
VALUES
(
:new.RESERVATION_ID,
:new.LOG_DATE,
:new.STATUS
);
end;
/
不知道該怎么做,我試圖給它賦值::new.LOG_DATE :=SYSDATE但它不起作用。我覺得這很愚蠢,但無法弄清楚這里有什么問題。
uj5u.com熱心網友回復:
您可以sysdate直接在插入陳述句中參考類似的內容,例如:
CREATE OR REPLACE TRIGGER AddReservationTrigger
AFTER INSERT ON RESERVATION
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
INSERT INTO RESERVATIONLOG
(
RESERVATION_ID,
LOG_DATE,
STATUS
)
VALUES
(
:new.RESERVATION_ID,
SYSDATE,
:new.STATUS
);
end;
/
旁注:您不能更改 :new.LOG_DATE 的原因是因為這是 RESERVATION 表上的“AFTER”觸發器;觸發器在插入完成后觸發,因此更改該列的值沒有意義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/350099.html
下一篇:分組依據比選擇的欄位少
