删除最新的DML操作

时间:2015-03-29 21:03:17

标签: sql oracle triggers

我有一个触发器可以阻止任何不是我的用户进行DML注射,无论谁尝试收到错误消息“抱歉,你不被允许这样做”

但是我的触发器显示此消息,但仍然继续使用用户发送的代码。有没有办法阻止这种情况发生,忽略声明或删除最近的交易?

旁注:我知道,使用触发器可能不是可行的方法,但请忽略这一点,我正在努力学习,现在我正在学习触发器。

谢谢

create or replace trigger my_ex
before insert or update or delete on kund
declare
my_ex exception;
begin
if user not in ('me') then raise my_ex;
end if;
exception
When only_boss then raise_application_error(-20009,'Illegal activity!');
rollback;
end;
/

1 个答案:

答案 0 :(得分:0)

您的例外必须如此声明:

my_ex EXCEPTION;
PRAGMA EXCEPTION_INIT(my_ex, -20001);

然后默认情况下Oracle中的用户名是大写的,即你应该写

if user not in ('ME') then 
   raise my_ex;
end if;