PLSQL触发器新增记录时插入当前日期时间报错PLS-00049如何解决?
错误原因
:NEW是Oracle触发器专属的绑定变量,仅代表触发器所挂载的RESERVATION表中刚刚新增的行数据。你当前代码错误地将RESERVATIONLOG表的字段LOG_DATE、STATUS加到了:NEW前缀后,但RESERVATION表本身不存在这两个字段,因此抛出绑定变量不存在的PLS-00049错误。
你尝试直接给:NEW.LOG_DATE赋值的操作也必然失败,本质还是在操作RESERVATION表不存在的字段。
修正后的触发器代码
你直接将日志需要的字段值填入INSERT语句即可:LOG_DATE直接取当前系统时间SYSDATE,STATUS取RESERVATION表新插入行的对应状态字段即可(如果你的RESERVATION表状态字段名不是STATUS,替换成实际字段名即可):
CREATE OR REPLACE TRIGGER AddReservationTrigger AFTER INSERT ON RESERVATION FOR EACH ROW BEGIN INSERT INTO RESERVATIONLOG (RESERVATION_ID, LOG_DATE, STATUS) VALUES (:NEW.RESERVATION_ID, SYSDATE, :NEW.STATUS); END; /
这里也去掉了多余的变量声明和SYSDATE查询逻辑,直接在INSERT语句中赋值即可,代码更简洁。
内容的提问来源于stack exchange,提问作者krysznys
相关产品推荐
相关产品推荐

