【发布时间】:2018-02-25 22:01:59
【问题描述】:
CREATE OR REPLACE TRIGGER placement_audit_trigger
BEFORE INSERT OR DELETE OR UPDATE ON LDS_PLACEMENT
FOR EACH ROW
ENABLE
DECLARE
v_user varchar(30);
v_date varchar(30);
BEGIN
SELECT user, TO_CHAR(sysdate, 'DD/MON/YYYY HH24:MI:SS') INTO v_user, v_date FROM dual;
IF INSERTING THEN
INSERT INTO placement_audit (new_name, old_name, user_name, entry_date, operation)
VALUES(:NEW.PLACEMENT_ID, NULL, v_user, v_date, 'Insert');
ELSIF DELETING THEN
INSERT INTO placement_audit (new_name, old_name, user_name, entry_date, operation)
VALUE (NULL,:OLD.PLACEMENT_ID, v_user, v_date, 'Delete');
ELSIF UPDATING THEN
INSERT INTO placement_audit (new_name, old_name, user_name, entry_date, operation)
VALUES(:NEW.PLACEMENT_ID, :OLD.PLACEMENT_ID, v_user, v_date,'Update');
END IF;
END;
尝试创建触发器,以跟踪用户在表中所做的更改但保留 ORA-24344:编译错误成功我已经研究并尝试解决问题,谁能告诉我我哪里出错了或指出我正确的方向。
【问题讨论】:
-
请输入“显示错误;”在收到错误后触发用户下(如果您使用的是 SQLPlus 命令行)或从 user_errors 视图中选择以获取更详细的消息。
-
您到底为什么将 sysdate 存储并插入为 VARCHAR2?
-
你可以简单地写像
INSERT INTO placement_audit (new_name, old_name, user_name, entry_date, operation) VALUES(:NEW.PLACEMENT_ID, :OLD.PLACEMENT_ID, USER, SYSDATE,'Update');这样的插入 - 不需要select ... into ... from dual; -
@WernfriedDomscheit 如何定义进行更改的用户,请阅读问题
-
@WernfriedDomscheit 是对的 - 将 v_date varchar(30) 更改为 v_date 日期。