视图trigger, instead of

我们知道如果一个view只是由一个table构成,那在view上做啥操作没太多限制.如果view是由多个table组成那在view上做啥unpdate,insert,delete都会出错.但有时又确实要做这些操作该咋办呢.这就需要用到trigger,然后通过instead of关键字来指定一些替代操作.

举个简单例子,如果有view, my_view创建trigger如下

create or replace trigger my_view_trigger

instead of insert or update

on my_view

declare

insert into tmp(eno) values(:new.eno);

end;

当执行sql : insert into my_view(eno, name) values(88,'test');时触发trigger.

不过view的instead of类型的trigger相对其他类型trigger有个特别的地方.从名字也可以看出来,可以替换掉了触发它的sql的操作.也就是insert into my_view(eno, name) values(88,'test');这个sql本身的操作不会起作用了.只有trigger里面的pl/sql语句块才真正执行.

注意事项:

1.instead of 类型触发器只能针对view创建,并且该view上不能有些check option(比如with check read only之类的),这以所这样是防止不同的功能之间的冲突.假如是一个read only类型的view,那自然不能整出个trigger又可以做些DML操作了.

2.不能指定before或after选项,因为触发trigger的sql实际上并不会执行,所以before或after就没有啥意义了.

Database , Schema级别trigger

针对表和视图的Triggers可能开发人员用的多.针对database,schema的Trigger一般是DBA用的多点.

比如创建trigger每当schema上有DDL操作时触发(针对表或视图的trigger只能针对DML操作,不能针对DDL操作).

举个简单的例子

CREATE OR REPLACE TRIGGER ddl_trigger

AFTER DDL ON SCHEMA

BEGIN

insert into tblog values(systimestamp,ora_sysevent, ora_login_user,
ora_dict_obj_type, ora_dict_obj_name);
END;

其中ora_login_user是登陆名,ora_dict_obj_type对象类型(比如表或视图),ora_dict_obj_name是对象名字,比如表名或视图名.你可能看到这些变量貌似没在哪里定义.实际上是oracle定义好的,你只要拿来用就行.

假如随便用哪个用户执行如下sql: create table tmp_tb(eno int);  就会触发trigger.

不过貌似上面不能直接指定是具体的哪个schema,只能针对所有schema了啊.

假如用户每次登陆时要做些记录.那可以创建如下trigger

CREATE OR REPLACE TRIGGER  logon_trigger
AFTER LOGON ON DATABASE
BEGIN
INSERT INTO tblog VALUES (ora_login_user, ora_client_ip_address, systimestamp);
END ;

这里的logon on database不是说数据库启动,而是每次连接一个session的时候.

Oracle触发器(trigger):view,schema,database的更多相关文章

  1. Oracle触发器(trigger):一般用法

    trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视图创建一个trigger,然后对表或视图做某些 ...

  2. Oracle触发器Trigger基础1

    /* Trigger是作用在表上,或是数据库上,或是用户上.当用户在表上(其他)做某些操作时,trigger将会自己执行. 可以在表上:insert,update,delete Trigger只对表的 ...

  3. Oracle 触发器 trigger

    触发器: 当用户登录/退出或者操作某个数据对象或者进行DDL(建表,建view)引起某个储存过程的值的变化,把这个隐含被调用的过程,称为触发器. 语法 CREATE OR REPLACE TRIGGE ...

  4. 【database】oracle触发器基础

    一.oracle触发器基本语法 CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE ...

  5. oracle:触发器,自治事务 trigger

    create or replace trigger TRI_FC83_INSERT before insert ON FC83 FOR EACH ROW declare PRAGMA AUTONOMO ...

  6. Oracle触发器原理、创建、修改、删除

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  7. ORACLE 触发器

    •1.1 触发器类型 • DML触发器 • 替代触发器 • 系统触发器 •1.2 创建触发器 • 触发器触发次序 • 创建DML触发器 • 创建替代(INSTEAD OF)触发器 • 创建系统事件触发 ...

  8. (转)ORACLE触发器详解

    本文转载自:http://blog.csdn.net/indexman/article/details/8023740/ ORACLE PL/SQL编程之八: 把触发器说透 本篇主要内容如下: 8.1 ...

  9. oracle触发器详解(转)

    触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 8.1 触发器类型 触发器在数据库里以独立的对象存储,它与存储过 ...

随机推荐

  1. cursor的形状

    Example:CSS鼠标手型效果 <a href="#" style="cursor:hand">CSS鼠标手型效果</a> Exam ...

  2. 一个php创建webservice,并通过c#调用的真实实例

    最近需要用php创建webservice供C#和JAVA来调用,通过3天的搜索和尝试,终于成功在C#下调用,JAVA的调用还没开始,为防止忘记,在这里记录下来全过程. 本文参考了许多文章,文中也采用了 ...

  3. Sencha Touch 之 Ext.fly方法的使用

    Ext.fly方法是Ext.js 4中的flyweight技术,该技术在浏览器中为使用Ext.fly方法的元素节点开辟一块内存,下一次使用Ext.fly方法的元素节点将占据同一块内存,即覆盖前一次的元 ...

  4. GitHub 菜鸟使用

    之前有用过一次,但是一直弄不明白怎么用,今天我又试了一下,成功了,现在我就记录下来,为了以后的使用以及帮助那些跟我原先一样不会用的同学 进入正题: Step 1: 注册GitHub账号 https:/ ...

  5. CentOS rc.local 不执行的问题

    centos7 开机/etc/rc.local 不执行的问题 时间:2015-02-09 00:54来源:blog.51cto.com 作者:“闲潭小筑” 博客, 举报 点击:次 最近发现centos ...

  6. 内核级HOOK的几种实现与应用

    实现内核级 HOOK 对于拦截.分析.跟踪系统内核起着致关重要的作用.实现的方法不同意味着应用侧重点的不同.如想要拦截 NATIVE API 那么可能常用的就是 HOOK SERVICE TABLE  ...

  7. iptsbles及磁盘扩容

    如果你的IPTABLES基础知识还不了解,建议先去看看. 们来配置一个filter表的防火墙 1.查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Cha ...

  8. Saiku国际化总结

    国际化步骤: 1.在mondrian.properties同路径下加上locale_zh_CN.properties资源文件,内容例如:schema.name.K12UserAnalysis=K12用 ...

  9. HDU 3468 Treasure Hunting(BFS+网络流之最大流)

    题目地址:HDU 3468 这道题的关键在于能想到用网络流.然后还要想到用bfs来标记最短路中的点. 首先标记方法是,对每个集合点跑一次bfs,记录全部点到该点的最短距离.然后对于随意一对起始点来说, ...

  10. 素数距离问题_ny_24.java

    素数距离问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 2   描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距 ...