我有两个表:
create table superheroes('sh_name varchar2(30));
create table sh_audit(new_name varchar2(30), old_name varchar2(30), username varchar2(30), entry_date varchar2(30), operation);
触发:
create or replace trigger SUPERHEROES_AUDIT
before insert or update or delete on superheroes
for each row
enable
declare
v_user varchar2(30);
v_date varchar2(30);
begin
select user, TO_CHAR(SYSDATE,' DD/MM/YYYY HH24:MI:SS') INTO v_user, v_date from dual;
if inserting then
insert into sh_audit(new_name, old_name, username, entry_date, operation)
values(:NEW.sh_name, null, v_user, v_date,'insert');
elsif deleting then
insert into sh_audit(new_name, old_name, username, entry_date, operation)
values(null, :OLD.sh_name, v_user, v_date,'delete');
elsif updateing then
insert into sh_audit(new_name, old_name, username, entry_date, operation)
values(:NEW.sh_name, :OLD.sh_name, v_user, v_date,'update');
end if;
end;
/
错误:触发SUPERHEROES_AUDIT编译错误:检查编译器日志 错误(5,5):PL / SQL:语句被忽略错误(11,11):PLS-00201: 标识符“ UPDATEING”必须声明。
答案 0 :(得分:1)
尝试像这样分离触发器:
CREATE OR REPLACE TRIGGER TRG_BI_SUPERHEROES_AUDIT
BEFORE INSERT
ON SUPERHEROES
FOR EACH ROW
ENABLE
BEGIN
INSERT INTO SH_AUDIT (NEW_NAME, OLD_NAME, USERNAME, ENTRY_DATE, OPERATION)
VALUES (
:NEW.SH_NAME,
NULL,
USER,
TO_CHAR (SYSDATE, ' DD/MM/YYYY HH24:MI:SS'),
'insert');
END;
CREATE OR REPLACE TRIGGER TRG_BU_SUPERHEROES_AUDIT
BEFORE UPDATE
ON SUPERHEROES
FOR EACH ROW
ENABLE
BEGIN
INSERT INTO SH_AUDIT (NEW_NAME, OLD_NAME, USERNAME, ENTRY_DATE, OPERATION)
VALUES (
:NEW.SH_NAME,
:OLD.SH_NAME,
USER,
TO_CHAR (SYSDATE, ' DD/MM/YYYY HH24:MI:SS'),
'update');
END;
CREATE OR REPLACE TRIGGER TRG_BD_SUPERHEROES_AUDIT
BEFORE DELETE
ON SUPERHEROES
FOR EACH ROW
ENABLE
BEGIN
INSERT INTO SH_AUDIT (NEW_NAME, OLD_NAME, USERNAME, ENTRY_DATE, OPERATION)
VALUES (
NULL,
:OLD.SH_NAME,
USER,
TO_CHAR (SYSDATE, ' DD/MM/YYYY HH24:MI:SS'),
'insert');
END;