WEB开发网
开发学院数据库Oracle Oracle数据库11g新特性:高效的PL/SQL编码 阅读

Oracle数据库11g新特性:高效的PL/SQL编码

 2008-12-16 13:03:47 来源:WEB开发网   
核心提示: 为了更好地了解触发器的工作方式,我们来执行一个示例更新操作,Oracle数据库11g新特性:高效的PL/SQL编码(3),该操作将更新四行,update bookingsset booking_dt = sysdatewhere booking_id between 100 and 103

为了更好地了解触发器的工作方式,我们来执行一个示例更新操作,该操作将更新四行。

  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

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Oracle 数据库 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接