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

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

 2008-12-16 13:03:47 来源:WEB开发网   
核心提示:自推出以来,PL/SQL 就一直是在 Oracle 数据库中编程的首选语言,Oracle数据库11g新特性:高效的PL/SQL编码,经过一段时间的发展,我们看到,然后在 after-statement 触发器上读取它 — 这可不是一项简单的任务,相反,由于该语言可以实现越来越多需要较少编码的功能,它已经演变

自推出以来,PL/SQL 就一直是在 Oracle 数据库中编程的首选语言。经过一段时间的发展,我们看到,由于该语言可以实现越来越多需要较少编码的功能,它已经演变为一个综合的开发平台。Oracle 数据库 11g 使得 PL/SQL 编码对程序员更加高效。在本文中,您将通过某些示例简单了解这个新功能。

复合触发器

请考虑一个宾馆数据库:宾馆房间的预订记录在名为 BOOKINGS 的表中。您还希望将对该表的更改记录到一个跟踪表 — 有些类似于审计,但稍有不同:您希望该操作是事务性的。在这种情况下,触发器非常适用。

您可以使用一个小型的 after-update 行触发器,将旧值和新值连同更改者一起记录到 BOOKINGS_HIST 表中。到目前为止,一切都没问题。

但这里有一个小问题。after-update 行触发器将针对每一行触发,但某些预订是批量更改的,在一个事务中更新几百行。单独的 after-update 行触发器针对这些行中的每一行触发,并且每个执行在 bookings_hist 表中插入一条记录,因此性能不是最佳的。

更好的方法是批处理这些插入,并将它们批量插入 bookings_hist 表。您可以使用一系列复杂的触发器来完成这个任务。方法是:在行触发器中,将要插入 bookings_hist 表的值放到一个集合中,然后在 after-update-statement 触发器(只触发一次)中,将集合中的数据加载到 bookings_hist 表。由于实际插入只发生一次,因此该过程比在每一行上插入要快。

但它们是不同代码片段中的两个不同的触发器。将集合变量从一个触发器传递到另一个触发器的唯一方式是,在程序包规范中创建一个带有集合变量(如 VARRAY 或 PL/SQL TABLE)的程序包,在 after-update 行触发器上填充该程序包,然后在 after-statement 触发器上读取它 — 这可不是一项简单的任务。相反,如果您将所有触发器都放到一个代码片段中,不是更简单吗?

1 2 3 4 5 6  下一页

Tags:Oracle 数据库 特性

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