设为首页 加入收藏

TOP

关于触发器一些小结(二)
2015-11-21 02:01:14 来源: 作者: 【 】 浏览:1
Tags:关于 触发器 一些 小结
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)
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于ADO记录集GetRecordCount()返.. 下一篇启动hbase的regionserver

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: