首页数据库oracle数据库触发器 Oracle 中的触发器有几种

oracle数据库触发器 Oracle 中的触发器有几种

编程之家2023-10-2194次浏览

大家好,感谢邀请,今天来为大家分享一下oracle数据库触发器的问题,以及和Oracle 中的触发器有几种的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

oracle数据库触发器 Oracle 中的触发器有几种

Oracle 中的触发器有几种

ORACLE数据库有四种触发器,分别是DML、Instead-of、DDL、DB触发器,一般的应用系统中都是用到DML、Instead-of触发器,DDL、DB两种触发器是DBA管理数据库用得比较多

四种触发器分别有不同的作用

一、DML触发器:当发出UPDATE、INSERT、DELETE命令就可以触发已定义好的DML触发器,是最简单和常用的一种触发器

语法:

create or replace trigger trigger_name

after|before insert|update|delete

oracle数据库触发器 Oracle 中的触发器有几种

on table_name

for each row

二、Instead-of触发器:当向一个由多个表联接成的视图作DML操作时,一般情况下是不允许的,这时候就可以用Instead-of触发器来解决这种问题(在触发器写代码分别对各表作相应DML操作),语法是这样的:

create or replace trigger trigger_name

instead of insert|update|delete

on view_name

oracle数据库触发器 Oracle 中的触发器有几种

for each row

三、DDL触发器:当发出CREATE、ALTER、DROP、TRUNCATE命令时会触发已定义好的DDL触发器,这种触发器可以用来监控某个用户或整个数据库的所有对象的结构变化

语法:

create or replace trigger trigger_name

before|after create|alter|drop|truncate

on schema|database

例:

--禁止用CREATE、ALTER、DROP、TRUNCATE命令操作APPS用户的对象

create or replace trigger apps_no_ddl

before create or alter or drop or truncate

on apps

begin

raise_application_error(-20001,'不允许用DDL操作APPS用户的对象');

end;

四、DB事件触发器:当STARTUP、SHUTDOWN、LOGON、LOGOFF数据库时就会触发DB事件触发器,这种触发器可以用来监控数据库什么时候关闭/打,或者用户的LOGON/LOGOFF数据库情况

语法:

create or replace trigger trigger_name

before|after startup|shutdown|logon|logoff

on database

例:

--记录数据库关闭的时间(shutdown类型要用关键字before,startup用after)

create or replace trigger db_shutdown

before shutdown

on database

begin

insert into test_tbl(log_event) values('db shutdown at'||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

commit;

end;

--记录用户LOGON时间(logoff类型要用关键字before,logon用after)

create or replace trigger user_logon_db

after logon

on database

begin

insert into test_tbl(username,logon_time) values(user,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

commit;

end;

注意:要创建DDL和DB事件这两种触发器必须要有DBA的权限才行

oracle中触发器都有几种

oracle中触发器有三种

1.DML触发器

ORACLE可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。

2.替代触发器

由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8专门为进行视图操作的一种处理方法。

3.系统触发器

ORACLE 8i提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进行触发,如ORACLE系统的启动与关闭等。

oracle数据库如何创建触发器实例

Oracle DBA Studio工具里面就能创建触发器 CREATE TRIGGER名称 CREATE TRIGGER创建一个新触发器语法 CREATE TRIGGER name{ BEFORE| AFTER}{ event [OR...]} ON table FOR EACH{ ROW| STATEMENT} EXECUTE PROCEDURE func( arguments)输入 n

Oracle DBA Studio工具里面就能创建触发器

CREATE TRIGGER

名称

CREATE TRIGGER—创建一个新触发器

语法

CREATE TRIGGER name{ BEFORE| AFTER}{ event [OR...]}

ON table FOR EACH{ ROW| STATEMENT}

EXECUTE PROCEDURE func( arguments)

输入

name

触发器名称.

table

表名称.

event

INSERT,DELETE或 UPDATE之一.

funcname

一个用户提供的函数.

输出

CREATE

如果触发器成功创建,返回此信息.

描述

CREATE TRIGGER将向现有数据库中增加一个新的触发器.触发器将与表 table相联并且将执行声明的函数 funcname.

触发器可以声明为在对记录进行操作之前(在检查约束之前和 INSERT,UPDATE或 DELETE执行前)或之后(在检查约束之后和完成了 INSERT,UPDATE或 DELETE操作)触发.如果触发器在事件之前,触发器可能略过当前记录的操作或改变被插入的(当前)记录(只对 INSERT和 UPDATE操作有效).如果触发器在事件之后,所有更改,包括最后的插入,更新或删除对触发器都是"可见"的.

请参考 PostgreSQL程序员手册中SPI和触发器章节获取更多信息.

注意

CREATE TRIGGER是一个 Postgres语言扩展.

只有表所有者可以就此表创建一个触发器.

在当前的版本(v7.0),STATEMENT触发器还没有实现.

请参考 DROP TRIGGER获取如何删除触发器的信息.

用法

在插入或更新表 films之前检查一下声明的分销商代码是否存在于 distributors表中:

CREATE TRIGGER if_dist_exists

BEFORE INSERT OR UPDATE ON films FOR EACH ROW

EXECUTE PROCEDURE check_primary_key('did','distributors','did');

在删除或更新一个分销商的内容之前,将所有记录移到表 films中(译注:好象与例子意义不同):

CREATE TRIGGER if_film_exists

BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW

EXECUTE PROCEDURE check_foreign_key(1,'CASCADE','did','films','did');

兼容性

SQL92

在 SQL92里没有 CREATE TRIGGER语句.

上面第二个例子可以使用一个 FOREIGN KEY约束实现:

CREATE TABLE distributors(

did DECIMAL(3),

name VARCHAR(40),

CONSTRAINT if_film_exists

FOREIGN KEY(did) REFERENCES films

ON UPDATE CASCADE ON DELETE CASCADE

);

实例

Oracle中触发器有几种,用法与SQL Server一样吗谢谢

ORACLE触发器有以下两类:

1

语句级(Statement-level)触发器,在CREATE

TRIGGER语句中不包含FOR

EACH

ROW子句。语句级触发器对于触发事件只能触发一次,

而且不能访问受触发器影响的每一行的列值。一般用语句级触发器处理有关引起触发器触发的SQL语句的信息——例如,由谁来执行

2

行级(Row-level)触发器,在CREATE

TRIGGER语句中包含FOR

EACH

ROW子句。行级触发器可对受触发器影响的每一行触发,并且能

够访问原列值和通过SQL语句处理的新列值。行级触发器的典型应用是当需要知道行的列值时,执行一条事务规则。

SQL

Server支持两种类型的触发器:

AFTER

触发器和INSTEAD

OF

触发器。其中AFTER

类型触发器要求只有执行某一操作(INSERT

UPDATE

DELETE)

之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER

触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder

来完成此任务。

INSTEAD

OF

触发器表示并不执行其所定义的操作(INSERT、

UPDATE、

DELETE),而仅是执行触发器本身。既可在表上定义INSTEAD

OF

触发器,也可以在视图上定义INSTEAD

OF

触发器,但对同一操作只能定义一个INSTEAD

OF

触发器。

好了,文章到此结束,希望可以帮助到大家。

阿里云 数据库(阿里云数据中心在哪里)java数据库连接池 Java开发常用的几个数据库连接池