Oracle触发器(trigger):view,schema,database
视图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的更多相关文章
- Oracle触发器(trigger):一般用法
trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视图创建一个trigger,然后对表或视图做某些 ...
- Oracle触发器Trigger基础1
/* Trigger是作用在表上,或是数据库上,或是用户上.当用户在表上(其他)做某些操作时,trigger将会自己执行. 可以在表上:insert,update,delete Trigger只对表的 ...
- Oracle 触发器 trigger
触发器: 当用户登录/退出或者操作某个数据对象或者进行DDL(建表,建view)引起某个储存过程的值的变化,把这个隐含被调用的过程,称为触发器. 语法 CREATE OR REPLACE TRIGGE ...
- 【database】oracle触发器基础
一.oracle触发器基本语法 CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE ...
- oracle:触发器,自治事务 trigger
create or replace trigger TRI_FC83_INSERT before insert ON FC83 FOR EACH ROW declare PRAGMA AUTONOMO ...
- Oracle触发器原理、创建、修改、删除
本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...
- ORACLE 触发器
•1.1 触发器类型 • DML触发器 • 替代触发器 • 系统触发器 •1.2 创建触发器 • 触发器触发次序 • 创建DML触发器 • 创建替代(INSTEAD OF)触发器 • 创建系统事件触发 ...
- (转)ORACLE触发器详解
本文转载自:http://blog.csdn.net/indexman/article/details/8023740/ ORACLE PL/SQL编程之八: 把触发器说透 本篇主要内容如下: 8.1 ...
- oracle触发器详解(转)
触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 8.1 触发器类型 触发器在数据库里以独立的对象存储,它与存储过 ...
随机推荐
- 练习-checkbox 全选 ,反选, 单选,以及取值
1.方法1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...
- c++ containers
顺序容器 array(C++11) vector string deque forward_list(C++11) list 容器适配器 stack queue priority_queue 关联容器 ...
- CeontOS7安装ansible
安装方法一. 第一步:安装epel rpm -ivh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 第二步:安装a ...
- MYSQL 错误日志
背景知识 : 就算我们不配置mysql的错误文件,它也会有一个默认的,在data文件夹下保存(.err文件) 还好这个文件保存在哪我们还是可以配置的 配置方法: log-err=E:\DB\mysql ...
- 传智播客C/C++学院年薪24-50万招聘C/C++讲师
C/C++技术讲师 6名 (北京,年薪:24-50万) 传智播客C/C++课程培训体系如下: 1.C语言,世界五百强C语言面试训练 2.C++语言,世界五百强C++语言面试训练 3.数据结构与算法,世 ...
- 『HTML5梦幻之旅』-缤纷多姿的烟花效果
天花无数月中开,五采祥云绕绛台.堕地忽惊星彩散,飞空旋作雨声来.怒撞玉斗翻晴雪,勇踏金轮起疾雷.更漏已深人渐散,闹竿挑得彩灯回. ——明·瞿佑·<烟火戏> 记得每年过春节的那段时间,除了欣 ...
- hdu3038 How Many Answers Are Wrong【基础种类并查集】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4298091.html ---by 墨染之樱花 题目链接:http://acm.hdu.ed ...
- IIS发布问题-用户 'IIS APPPOOL\DefaultAppPool' 登录失败
今天新建了一个ASP.NET(Language=C#)网站,配置好数据库后编写了几行代码测试数据库的是否能正常使用. 当运行程序时,第一个页面都没有打开就出现了错误(因为我首页就访问数据库,填充一些D ...
- activity的打开关闭动画
Activity的打开关闭或者说相互跳转之间可以设置动画的.默认的打开关闭直接消失或出现,比较不优美,但是有的手机Rom对这个默认做了修改,比如红米HM1,默认的就是新页面自右向左滑动出现,自左向右滑 ...
- C++的标准模板库(STL)简介
STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的.在被引入C++之前该技术就已经存在了很长的一段时间.后来STL成为ANSI ...