Oracle 中的触发器有几种?
发布网友
发布时间:2022-04-20 14:58
我来回答
共1个回答
热心网友
时间:2024-04-10 16:56
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
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
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 中的触发器有几种?
ORACLE数据库有四种触发器,分别是DML、Instead-of、DDL、DB触发器,一般的应用系统中都是用到DML、Instead-of触发器,DDL、DB两种触发器是DBA管理数据库用得比较多 四种触发器分别有不同的作用 一、DML触发器:当发出UPDATE、INSERT、DELETE命令就可以触发已定义好的DML触发器,是最简单和常用的一种触...
oracle触发器写法
oracle触发器写法是什么呢?不知道的小伙伴来看看小编今天的分享吧!oracle触发器写法:
Oracle中触发器有几种,用法与SQL Server一样吗?谢谢
语句级(Statement-level)触发器,在CREATE TRIGGER语句中不包含FOR EACH ROW子句。语句级触发器对于触发事件只能触发一次,而且不能访问受触发器影响的每一行的列值。一般用语句级触发器处理有关引起触发器触发的SQL语句的信息——例如,由谁来执行 2 行级(Row-level)触发器,在CREATE TRIGGER语句中包...
按照触发方式,oracle的触发器分为语句级和行级两种类型,在视图上所创...
Alter trigger …..disenable; 使得触发器不可用; Alter trigger ……enable; 开启触发器;Oracle的内置程序包扩展数据库的功能;为PL/SQL提供对SQL功能的访问;一般具有sys权限的高级管理人员使用;一个典型的程序包就是dbms_output,你老是用它的过程put_line();Dbms_standard 提供语言工具;Dbms_lob操作Oracle LOB;就...
Oracle触发器的触发器类型.
1、语句级触发器语句级触发器在每个数据修改语句执行后只调用一次,而不管这一操作将影响到多少行。例1:创建一个orderdetails_tablelog表及一个AFTER触发器,用于记录是哪些用户删除了orderdetails表中的数据及删除的时间。--先创建表createtableorderdetails_tablelog(whovarchar2(40),oper_datedate);--...
在oracle中,8位二进制数据要使用几个触发器?
触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据...
oracle建立触发器 success with compilation error
1、oracle数据库中的触发器,insert into users values('05','trigger','普通','trigger','拥有一般权限');。2、oracle数据库中的触发器(触发器dml删除三条记录后)delete from users where u_type='其他';。3、oracle数据库中的触发器(替代触发器修改记录信息)。4、oracle数据库中的触发器(...
Oracle 触发器问题,事件中所涉及到的数据量非常大。大神指点迷津。_百 ...
触发器分为语句级触发器和行级触发器,区别就是,语句级触发器没有指定FOR EACH ROW,只在语句执行完毕后调用一次触发器,而不管这条语句影响到多少行;行级触发器指定了FOR EACH ROW,当一个DML语句操作影响到数据库中的多行数据时,对于其中的每一个数据行,行级触发器均会被触发一次。。。给分...
Oracle数据库触发器的组成是怎样的
触发器的语法:create [or replace] tigger 触发器名 触发时间 触发事件on 表名[for each row]begin pl/sql语句end 其中:触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。触发时间:指明触发器何时执行,该值可取:before:表示在数据库动作之前...