after ddl on hr.schema =>对于ddl触发器,可以直接写ddl,系统会识别何操作
declare
-- local variables here
begin
insert into t_trigger values(sys.login_user,sys_context('userenv','ip_address'),sysdate,sys_context('userenv','terminal'),sys.sysevent,
null,null);
end t_tirgger_ddl;
for each row 不能用于对象触发器
对于schema,很多初学者很困惑,不知道这个是什么概念,这个逻辑概念很重要,指用户具有所有对象的集合。
SQL> alter table t add address varchar2(20);
表已更改。
SQL> select * from t_trigger;
USERNAME IP TIME TERMINAL
EVENT ID NAME
-------------------- -------------------- -------------------- -----------------
--- -------------------- ---------- --------------------
HR
170.12.15.20 19-4月 -15 PC201409141201
ALTER
db触发器:当STARTUP、SHUTDOWN、LOGON、LOGOFF数据库时就会触发DB事件触发器,这种触发器可以用来监控数据库什么时候关闭或打开,或者用户的LOGON/LOGOFF数据库情况(shutdown类型要用关键字before,startup用after)
create or replace trigger t_tirgger_db
after logon on hr.schema
declare
-- local variables here
begin
insert into t_trigger values(sys.login_user,sys_context('userenv','ip_address'),sysdate,sys_context('userenv','terminal'),sys.sysevent,
null,null);
end t_tirgger_db;
重新连接:
SQL> select * from t_trigger;
USERNAME IP TIME
-------------------- ---------------------------------------- --------------
TERMINAL EVENT ID
---------------------------------------- -------------------- ----------
NAME
--------------------
HR
170.12.15.20
LOGON 19-4月 -15 PC201409141201
同理也可以创建:
create or replace trigger t_tirgger_db
after logoff on hr.schema
declare
-- local variables here
begin
insert into t_trigger values(sys.login_user,sys_context('userenv','ip_address'),sysdate,sys_context('userenv','terminal'),sys.sysevent,
null,null);
end t_tirgger_db;instead-of触发器:
SQL> create view t_view as select name,id from t;
视图已创建。
create or replace trigger t_tirgger_view
instead of insert on t_view
for each row
declare
-- local variables here
begin
insert into t_trigger values(sys.login_user,sys_context('userenv','ip_address'),sysdate,sys_context('userenv','terminal'),sys.sysevent,
:new.id,:new.name);
end t_tirgger_view;SQL> insert into t_view values('0',0);已创建 1 行。
SQL> select * from t_trigger;
USERNAME IP TIME
-------------------- ---------------------------------------- --------------
TERMINAL EVENT ID
---------------------------------------- -------------------- ----------
NAME
--------------------
HR
170.12.15.20
0 0
19-4月 -15 PC201409141201
删除触发器比较简单:
DROP TRIGGER trigger_name;当然你要有相关权限,在第三方工具中操作更加方便,如(pl/sql developer)