Oracle数据库11g新特性:高效的PL/SQL编码
2008-12-16 13:03:47 来源:WEB开发网为了更好地了解触发器的工作方式,我们来执行一个示例更新操作,该操作将更新四行。
update bookings
set booking_dt = sysdate
where booking_id between 100 and 103;
输出如下:
In before statement
In before each row
In after each row. booking_id=100
In before each row
In after each row. booking_id=101
In before each row
In after each row. booking_id=102
In before each row
In after each row. booking_id=103
In after statement
注意复合触发器的操作方式。粗略地说,它具有四个部分:
Before Statement
... 在语句前执行一次 ...
Before Row
... 在操作前每行执行一次 ...
After Row
... 在操作后每行执行一次 ...
After Statement
... 每条语句执行一次 ...
您将看到,该代码是单一代码片段,但每个部分都在不同的点执行。
在前面的示例中,我将 dbms_output 语句放在了不同的点上,以显示每个部分沿着哪些点执行。我更新了四行,其 booking_id 是 100、101、102 和 103,您可以看到,它调用了 before-statement 和 after-statement 触发器(每个一次)以及行触发器(before 和 after,每行一次)。(在前面的示例中,不需要 before-statement 或 before-row 触发器,但我还是将它们放在那里以演示该功能。)
如果您查看 bookings_hist 表,将看到现在有四条记录(每个 booking_id 一条),但这四条记录是在语句末尾批量插入的,而不是针对每一行更新:
BOOKING_ID MOD_DT MOD_USER OLD_BOOKI NEW_BOOKI
---------- --------- ------------------------------ --------- ---------
100 27-SEP-07 ARUP 28-AUG-07 27-SEP-07
101 27-SEP-07 ARUP 06-AUG-07 27-SEP-07
102 27-SEP-07 ARUP 04-SEP-07 27-SEP-07
103 27-SEP-07 ARUP 15-JUN-07 27-SEP-07
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接