![](/img/trans.png)
[英]SQL Server 2012 AFTER INSERT trigger that replaces null value with current date
[英]SQL Trigger To Replace Null Values in table with Current Date on INSERT?
我正在編寫一個觸發器,用於替換插入到我的Appointments
表的dates
(類型為DATE
)列中的任何NULL
值。 但我不知道如何插入當前日期。
我的觸發代碼:
CREATE OR REPLACE TRIGGER appointment_date_insert
BEFORE INSERT
ON appointments
FOR EACH ROW
WHEN (NEW.dates IS NULL)
BEGIN
:NEW.dates := NOW();
END;
/
上面給出了編譯器日志中的錯誤:
必須聲明 NOW()
我也嘗試使用GETDATE()
而不是NOW()
但它在編譯器日志中給出了與上面相同的錯誤。
要測試此觸發器,我的示例INSERT
查詢的dates
列值為NULL
,如下所示:
INSERT INTO appointments
VALUES (1, 'John', 'Doe', NULL);
我的appointments
表只有 4 列: patient_ID
、 first_name
、 last_name
和dates
理想情況下,最終結果應該在appointments
表中插入一個新行,如下所示:
1 | 約翰 | 母鹿 | 04-21-2017
用當前日期替換NULL
值
編輯:不允許我更改任何原始表結構,包括DEFAULT
值,否則我一開始就不需要問這個問題....
編輯這與解決方案now()
無同義詞不工作了now()
如果日期為NULL
,則可以使用COALESCE
將NOW()
替換為:NEW
日期,否則可以不使用它:
CREATE TABLE APPOINTMENTS(PATIENT_ID NUMBER, FIRST_NAME VARCHAR2(64), LAST_NAME VARCHAR2(64), DATES DATE);
CREATE OR REPLACE TRIGGER appointment_date_insert
BEFORE INSERT
ON appointments
FOR EACH ROW
BEGIN
:NEW.dates := COALESCE(:NEW.DATES,NOW());
END;
/
然后測試一下:
INSERT INTO appointments VALUES (1, 'John', 'Doe', NULL);
INSERT INTO appointments VALUES (2, 'Jane', 'Doe', SYSDATE - 100);
SELECT * FROM APPOINTMENTS;
PATIENT_ID FIRST_NAME LAST_NAME DATES
1 John Doe 21-APR-17
2 Jane Doe 11-JAN-17
作為NOW()
替代方法,您可以考慮SYSDATE
(或者,如果願意,可以考慮CURRENT_DATE
)
CREATE OR REPLACE TRIGGER appointment_date_insert
BEFORE INSERT
ON appointments
FOR EACH ROW
BEGIN
:NEW.dates := COALESCE(:NEW.DATES,SYSDATE);
END;
/
(
CASE
WHEN
to_char((JOINING_DATE),'DD-MON-YYYY') IS NOT NULL
THEN
to_char((JOINING_DATE),'DD-MON-YYYY')
ELSE
'-'
END
)
oracle 數據庫中沒有 NOW() function,可以使用 SYSDATE 或 CURRENT_DATE。 兩個函數的區別在下面[Oracle Community link].( https://community.oracle.com/tech/developers/discussion/2217249/sysdate-vs-current-date#:~:text=sysdate%20is %20the%20current%20date, getting%20the%20result%20as%200. )!
您可以使用此代碼創建觸發器。
CREATE OR REPLACE TRIGGER appointment_date_insert BEFORE
INSERT ON appointments FOR EACH ROW
BEGIN
IF inserting AND :NEW.dates IS NULL THEN
:NEW.dates:= sysdate;
END IF;
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.