Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104574288
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-30 16:11:17

 

触发器是当特定事件出现时自动执行的代码块.触发器与过程的区别在于:过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的.
触发器能够执行的功能有:
1.自动生成数据.
2.强制复杂的完整性约束条件.
3.自定义复杂的安全权限.
4.提供审计和日志记录.
5.启用复杂的业务逻辑.
触发器的类型有:
1>行级触发器.(行级触发器对DML语句影响的每个行执行一次)
实例一:
--触发器
--行级触发器
create table test(sid number,sname varchar2(20));--创建一个表
create sequence seq_test;--创建序列
create or replace trigger tri_test--创建触发器
before insert or update of sid
on test
for each row--触发每一行
begin
if inserting then
select seq_test.nextval into:new.sid from dual;
else
  raise_application_error(-20020,'不允许更新ID值!');--中断程序  
end if;
end;

--测试,插入几条记录
insert into test values(0,'ff');
insert into test values(0,'ff');
insert into test values(0,'tt');

输出结果如下图所示:



实例二:
--创建一个触发器,无论用户插入新记录,还是修改emp表的job列,都将用户指定的job列的值转换成大写.

create or replace trigger trig_job
before insert or update of job
on emp
for each row
begin
if inserting then
:new.job:=upper(:new.job);
else
:new.job:=upper(:new.job);
end if;
end;

2>语句级触发器.(语句级触发器对每个DML语句执行一次)
实例:
create or replace trigger tri_test
after insert or update or delete
on test
begin
if updating then
dbms_output.put_line('修改');
elsif deleting then
dbms_output.put_line('删除');
elsif inserting then
dbms_output.put_line('插入');
end if;
end;

3>instead of 触发器.(此触发器是在视图上而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器.)
语法如下:
create or replace trigger trig_test
instead of insert or update on 表名
referencing new as n
for each row
declare
..........
begin
........
end;
4>模式触发器.
可以在模式级的操作上建立触发器.
实例如下:
create or replace trigger log_drop_obj
after drop on schema
begin
insert into .....
end;
5>数据库级触发器.
可以创建在数据库存事件上的触发器,包括关闭,启动,服务器错误,登录等.这些事件都是实例范围的,不与特定的表或视图关联.
实例:
create or replace trigger trig_name
after startup on database
begin
...........
end;

OK,大概就这些了.

 

原文:http://hujing1229.blog.ccidnet.com/blog-htm-do-showone-uid-60604-type-blog-itemid-188257.html

阅读(166) | 评论(0) | 转发(0) |
0

上一篇:oracle基础(1)

下一篇:删除表中重复记录

给主人留下些什么吧!~~