Oracle 中的触发器有几种?
3个回答
展开全部
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的权限才行
四种触发器分别有不同的作用
一、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中触发器有三种
1.dml触发器
oracle可以在dml语句进行触发,可以在dml操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。
2
.替代触发器
由于在oracle里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是oracle
8专门为进行视图操作的一种处理方法。
3.
系统触发器
oracle
8i
提供了第三种类型的触发器叫系统触发器。它可以在oracle数据库系统的事件中进行触发,如oracle系统的启动与关闭等。
1.dml触发器
oracle可以在dml语句进行触发,可以在dml操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。
2
.替代触发器
由于在oracle里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是oracle
8专门为进行视图操作的一种处理方法。
3.
系统触发器
oracle
8i
提供了第三种类型的触发器叫系统触发器。它可以在oracle数据库系统的事件中进行触发,如oracle系统的启动与关闭等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分为三种:1
DML触发器2
替代触发器3
系统触发器
DML触发器2
替代触发器3
系统触发器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询