2017-12-04 17 views
0

누군가 트리거를 업데이트하는 데 도움을 줄 수 있습니까? 나는 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; 

저는 간단하지만 구성 방법을 찾을 수는 없습니다. 트리거를 수정 할 구문이 없습니다

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'); 
+0

'create or replace trigger'는 이미 기존 트리거를 새 코드로 대체합니다. 아니면 그냥 놓고 다시 만들 수 있습니다. –

+0

아인. 괜찮아. 나는 그것을 놓고 재창조해야 할 가능성이 가장 높다는 것을 알았지 만 단지 그것을 업데이트하기위한 또 다른 노력이 있었으면 좋겠다. –

+0

그런데 PL/SQL은 편리한 ': ='할당 연산자를 가지고 있기 때문에'select ... into ... from dual '을 필요로하지 않습니다. 또한'user'는 항상 트리거 소유자의 이름이 될 것입니다 . 아마도'sys_context ('userenv', 'os_user')'는 감사에 더 유용 할 것입니다. –

답변

0

, 당신이 당신 create or replace trigger 코드를 수정하고 다시 실행 : 그것은에 업데이트 그래서 나는 FK_SOCRD_ID를 추가 할. 나는 cr_surgery_audit.entry_date 실제로 date 아닌 varchar2입니다 가정 한

create or replace trigger cr_surgery_audit 
before insert or delete or update on cr_surgery 
for each row 
declare 
    k_user constant cr_surgery_audit.user_name%type := sys_context('userenv','os_user'); 
    k_date constant cr_surgery_audit.entry_date%type := sysdate; 
begin 
    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, k_user, k_date, 'insert', 12345); 
    elsif deleting then 
     insert into cr_surgery_audit (new_name, old_name, user_name, entry_date, operation) 
     values (null, :old.cr_surgery, k_user, k_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, k_user, k_date, 'update'); 
    end if; 
end; 

: 당신의 제안 된 변경으로

는, 나는 이런 일합니다.

fk_socrd_id을 채우려면 값이 필요하므로 123456을 더미 값으로 넣으십시오.

+0

굉장합니다. 감사합니다! –