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

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

 2008-12-16 13:03:47 来源:WEB开发网   
核心提示: 在Oracle 数据库11g 中,您可以这么做(使用复合触发器),Oracle数据库11g新特性:高效的PL/SQL编码(2),复合触发器实际上是作为一个整体定义的四个不同的触发器,例如,下面我们来考虑一个示例,添加了行编号,UPDATE 复合触发器将 before statement、b

在Oracle 数据库11g 中,您可以这么做(使用复合触发器)。复合触发器实际上是作为一个整体定义的四个不同的触发器。例如,UPDATE 复合触发器将 before statement、before row、after statement 和 after row 都合并到一个复合触发器中。这是一个单一代码片段,因此您可以像任何其他单一 PL/SQL 代码一样来传递变量。

下面我们来考虑一个示例。添加了行编号,以帮助说明。

1 create or replace trigger tr_bookings_track
2 for update of booking_dt
3 on bookings
4 compound trigger
5   type ty_bookings_hist is table of bookings_hist%rowtype
6     index by pls_integer;
7   coll_bookings_hist     ty_bookings_hist;
8   ctr             pls_integer := 0;
9 before statement is
10 begin
11   dbms_output.put_line('In before statement');
12 end before statement;
13 before each row is
14 begin
15   dbms_output.put_line('In before each row');
16 end before each row;
17 after each row is
18 begin
19   ctr := ctr + 1;
20   dbms_output.put_line('In after each row. booking_id='||:new.booking_id);
21   coll_bookings_hist(ctr).booking_id := :new.booking_id;
22   coll_bookings_hist(ctr).mod_dt := sysdate;
23   coll_bookings_hist(ctr).mod_user := user;
24   coll_bookings_hist(ctr).old_booking_dt := :old.booking_dt;
25   coll_bookings_hist(ctr).new_booking_dt := :new.booking_dt;
26 end after each row;
27 after statement is
28 begin
29   dbms_output.put_line('In after statement');
30   forall counter in 1..coll_bookings_hist.count()
31     insert into bookings_hist
32     values coll_bookings_hist(counter);
33 end after statement;
34 end tr_bookings_track;

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

Tags:Oracle 数据库 特性

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