在删除用户事件上能否创建触发器?如果可以,我应该如何编写触发器 - * 我想在删除用户后从表中删除与该用户相关的某些行 *
“删除用户”
你能提供一个例子吗:
如果用户被删除并且 Oracle 清除了用户模式对象,有没有办法可以选择要保留或删除的数据行?
那么您是说无法在删除用户事件上创建触发器吗?
create or replace trigger tr_drop_user
before drop on database
begin
if dbms_standard.dictionary_obj_type = 'USER' then
insert into logs ( user, object_name )
values ( sys_context('USERENV','OS_USER') -- OS User doing the dropping
, dbms_standard.dictionary_obj_name -- name of object being dropped
);
end if;
end;
/
dbms_standard
包来确定正在发生的事情。在我看来,PSOUG有更好的文档。before drop on schema
。
drop_user
和 create_user
过程,在一个地方完成所有操作,而不是将逻辑伪装为触发器中的操作。你不能在语句(DDL或DML,除了一些系统级语句,可以在这里找到here)上创建触发器。触发器只能在数据库的表上创建。在你的问题中,drop user <username>;
是一个语句。
我引用:
使用DROP USER语句删除数据库用户,并可选择删除用户的对象。
当你删除一个用户时,Oracle数据库还会从回收站中清除该用户的所有模式对象。
注意-鉴于你是否真正尝试drop
一个user
还是尝试drop
一个名为user
的自定义表的混淆,下面是你将使用的语句。
要删除一个DB用户- drop user username [cascade];
drop table user [cascade constraints];
[ ]
中的选项是可选的。drop
、delete
的一个。 - Anjan Biswas
delete
语句来删除用户,数据库用户只能通过使用drop
语句来删除。delete
语句用于从数据库表中删除行。 - Anjan Biswas