我正在编写一个触发器,用于替换插入我NULL
表的dates
(类型DATE
)列中的任何Appointments
值。但我无法弄清楚如何插入当前日期。
我的触发器代码:
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
列的NULL
dates
示例INSERT INTO appointments
VALUES (1, 'John', 'Doe', NULL);
查询如下:
appointments
我的patient_ID
表只有4列:first_name
,last_name
,dates
和appointments
理想情况下,最终结果应该在NULL
表中插入一个新行,如下所示:
1 |约翰| Doe | 2017年4月21日
使用当前日期替换DEFAULT
值
编辑:我不允许更改任何原始表格结构,包括set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -cc1")
值,否则我不需要在第一个问题中提出这个问题地方....
答案 0 :(得分:0)
编辑如果没有now()
的同义词,则now()
此解决方案无效。
如果COALESCE
为:NEW
,您可以使用NOW()
将NULL
日期替换为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;
/
,如果您愿意的话)
position: relative;