[英]simple trigger/procedure problem for oracle apex sql
im trying to run this audit trail trigger in oracle apex sql but i keep getting the same error and i dont know what im doing wrong.我试图在 oracle 顶点 sql 中运行此审计跟踪触发器,但我一直收到同样的错误,我不知道我做错了什么。 also i need to do this same trigger to every table in my database... is there a way i can do the same thing through a procedure so as to only having to do it once?
我还需要对数据库中的每个表执行相同的触发器...有没有办法我可以通过一个过程执行相同的操作以便只执行一次?
create or replace TRIGGER AUDIT_TRAIL_USERS_TRIG
-- starts on every update, insert or delete command
AFTER INSERT OR DELETE OR UPDATE ON USERS
FOR EACH ROW
DECLARE
-- variable which declares if update, delete or insert process
v_trg_action varchar2(10);
BEGIN
IF updating THEN
-- when update
v_trg_action := 'UPDATE';
ELSIF deleting THEN
-- when delete
v_trg_action := 'DELETE';
ELSIF inserting THEN
-- when insert
v_trg_action := 'INSERT';
ELSE
-- if something else
END IF;
IF v_trg_action IN ('DELETE','UPDATE','INSERT') THEN
-- if v_trg_action is DELETE, UPDATE OR INSERT then insert old table values
INSERT INTO AUDIT_TRAIL
( AUDIT_USER, AUDIT_DATE, AUDIT_ACTION)
VALUES
(UPPER(v('APP_USER')), SYSDATE, v_trg_action);
ELSE
END IF;
-- about the insert command on the audit table
-- for current apex user: v('APP_USER')
-- for date: SYSDATE
-- for sql command: v_trg_action
END AUDIT_TRAIL_USERS_TRIG;
the error im getting (im sure i have more than what its saying to me)is as follows:我得到的错误(我确定我比它对我说的更多)如下:
Compilation failed, line 16 (03:29:53) The line numbers associated with compilation errors are relative to the first BEGIN statement.编译失败,第 16 行 (03:29:53) 与编译错误相关的行号与第一个 BEGIN 语句相关。 This only affects the compilation of database triggers.
这只会影响数据库触发器的编译。
PLS-00103: Encountered the symbol "END" when expecting one of the following: ( begin case declare exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge json_exists json_value json_query json_object json_array Compilation failed, line 25 (03:29:53) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers. PLS-00103: Encountered the symbol "END" when expecting one of the following: ( begin case declare exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge json_exists json_value json_query json_object json_array Compilation failed, line 25 (03:29:53) 与编译错误相关的行号是相对于第一个 BEGIN 语句的,这只影响数据库触发器的编译。
PLS-00103: Encountered the symbol "END" when expecting one of the following: ( begin case declare exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge json_exists json_value json_query json_object json_array PLS-00103: Encountered the symbol "END" when expecting one of the following: ( begin case declare exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute提交 forall 合并 pipe 清除 json_exists json_value json_query json_object json_array
IF..ELSE blocks cannot be left empty. IF..ELSE 块不能为空。 If you don't need them remove it, I have added a dummy
NULL
call for the code to compile.Add appropriate logic as desired, otherwise remove the block.如果您不需要它们将其删除,我添加了一个虚拟
NULL
调用以编译代码。根据需要添加适当的逻辑,否则删除该块。
create or replace TRIGGER AUDIT_TRAIL_USERS_TRIG
-- starts on every update, insert or delete command
AFTER INSERT OR DELETE OR UPDATE ON USERS
FOR EACH ROW
DECLARE
-- variable which declares if update, delete or insert process
v_trg_action varchar2(10);
BEGIN
IF updating THEN
-- when update
v_trg_action := 'UPDATE';
ELSIF deleting THEN
-- when delete
v_trg_action := 'DELETE';
ELSIF inserting THEN
-- when insert
v_trg_action := 'INSERT';
ELSE
-- if something else
NULL;
END IF;
IF v_trg_action IN ('DELETE','UPDATE','INSERT') THEN
-- if v_trg_action is DELETE, UPDATE OR INSERT then insert old table values
INSERT INTO AUDIT_TRAIL
( AUDIT_USER, AUDIT_DATE, AUDIT_ACTION)
VALUES
(UPPER(v('APP_USER')), SYSDATE, v_trg_action);
null;
ELSE
NULL;
END IF;
-- about the insert command on the audit table
-- for current apex user: v('APP_USER')
-- for date: SYSDATE
-- for sql command: v_trg_action
END AUDIT_TRAIL_USERS_TRIG;
Use this code, it will work same like yours使用此代码,它将像您的一样工作
create or replace TRIGGER AUDIT_TRAIL_USERS_TRIG
AFTER INSERT OR DELETE OR UPDATE ON USERS
FOR EACH ROW
DECLARE
BEGIN
IF inserting or updating or deleting THEN
INSERT INTO AUDIT_TRAIL
(AUDIT_USER, AUDIT_DATE, AUDIT_ACTION)
VALUES
(UPPER(v('APP_USER')), SYSDATE, v_trg_action);
END IF;
END AUDIT_TRAIL_USERS_TRIG;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.