【发布时间】:2017-12-04 18:52:20
【问题描述】:
有人可以帮忙更新触发器吗?我知道我应该使用 alter 子句,但在那之后我被卡住了。我想更改此触发器:
CREATE OR REPLACE TRIGGER "CR_SURGERY_AUDIT"
before insert or delete or update on CR_SURGERY
for each row
declare
V_user varchar2 (30);
V_date varchar2 (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 CR_SURGERY_AUDIT (new_name, old_name, user_name, entry_date, operation)
VALUES (:NEW.CR_SURGERY, NULL, v_user, v_date, 'insert');
ELSIF DELETING THEN
insert into CR_SURGERY_AUDIT (new_name, old_name, user_name, entry_date, operation)
VALUES (null, :OLD.CR_SURGERY, v_user, v_date, 'delete');
ELSIF UPDATING THEN
insert into CR_SURGERY_AUDIT (new_name, old_name, user_name, entry_date, operation)
VALUES (:NEW.CR_SURGERY, :OLD.CR_SURGERY, v_user, v_date, 'Update');
END IF;
END;
我知道这很简单,但我找不到编写它的方法。我想添加 FK_SOCRD_ID 使其更新为:
select user, to_char(sysdate, 'dd/mon/yyyy') INTO v_user, v_date from dual;
IF inserting THEN
insert into CR_SURGERY_AUDIT (new_name, old_name, user_name, entry_date,
operation, FK_SOCRD_ID)
VALUES (:NEW.CR_SURGERY, NULL, v_user, v_date, 'insert');
【问题讨论】:
-
create or replace trigger已经用您的新代码替换了现有触发器。或者您可以直接删除并重新创建它。 -
天啊。好的。我确实读到很可能我必须删除并重新创建它,但希望有另一种解决方法来更新它。
-
顺便说一下,您不需要
select ... into ... from dual,因为 PL/SQL 有一个方便的:=赋值运算符 :) 此外,user将始终是触发器所有者的名称。也许sys_context(‘userenv’,’os_user’)对审计更有用。 -
嗨威廉,我该怎么写?对不起,我是新手。如果你不介意:)
标签: plsql sql-update alter eventtrigger