使用CASE语句插入值

时间:2014-11-16 20:28:30

标签: oracle plsql

我想在table中添加一些值,特别是由我正在使用的DML操作决定的值:   - 如果我是inserting行,我需要把我INSERT放到一个表中(我用它来记录用户做的所有操作)   - 如果我是deleting,那么DELETE   - 当我updating时,同样的事情。

我的代码是我insert上的table行的以下代码:

INSERT INTO AUD(usr, date, op, other_fields)
VALUES
(USER, SYSDATE,
CASE op
    WHEN INSERTING THEN 'INSERT'
    WHEN DELETING THEN 'DELETE'
    WHEN UPDATING THEN 'UPDATE'
END,
:OLD.other_fields
:NEW.other_fields);

但是当我在触发器中使用它并编译它时,它会显示ORA-00084错误并忽略我的触发器的某些前一行。提前致谢

我也试过了DECODE,但它也向我显示了同样的错误。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

   ...
   l_op aud.op%type;    
begin
  ...
  if INSERTING then
    l_op := 'INSERT';
  ...
  elsif UPDATING then
    l_op := 'UPDATE';
  ...
  end if;

  ...
  if l_op in ('INSERT', 'DELETE') 
     or l_op = 'UPDATE' 
        and (nvl(:old.fied1, 0) != nvl(:new.fied1, 0)
             or nvl(:old.fied2, 0) != nvl(:new.fied2, 0)
             ...
            )
  then 
    INSERT INTO AUD(usr, date, op, other_fields)
    values (USER, SYSDATE, l_op, :OLD.other_fields, :NEW.other_fields);
  end if;
  ...