我正在编写一个触发器,用来替换插入到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
查询示例(NULL
值对应于dates
列)如下所示:
INSERT INTO appointments
VALUES (1, 'John', 'Doe', NULL);
我的appointments
表只有4列:patient_ID
、first_name
、last_name
和dates
理想情况下,最终结果应在appointments
表中插入一个新行,如下所示:
一个|若翰|多伊|2017年4月21日
用当前日期替换NULL
值
EDIT:不允许我更改任何原始表结构,包括DEFAULT
值,否则我一开始就不需要问这个问题......
3条答案
按热度按时间kcrjzv8t1#
now()
的同义词,则此now()
解决方案不起作用。如果日期为
NULL
,则可以使用COALESCE
将:NEW
日期替换为NOW()
日期,否则将其保留:然后进行测试:
作为
NOW()
的替代方案,您可以考虑SYSDATE
(如果愿意,也可以考虑CURRENT_DATE
)hfyxw5xn2#
6qftjkof3#
Oracle数据库中没有NOW()函数,您可以使用SYSDATE或CURRENT_DATE。这两个函数之间的区别在于以下[Oracle社区链接]。(https://community.oracle.com/tech/developers/discussion/2217249/sysdate-vs-current-date#:~:text= sysdate%20is%20the%20current%20date,getting%20the%20result%20as%200.)!
您可以使用此代码创建触发器。