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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-03 23:10:40

作者:Builder 来源:

在PL/SQL中,批量绑定是高效处理动态DML的一种重要手段。它不用在程序内循环,每次迭代提交一个UPDATE语句;你可以使用FORALL语句提交一个含有绑定变量的单独UPDATE语句。集合,如嵌套表格或VARRAY,用来将多个数据值赋予给绑定变量。

产生的结果是在单程访问SQL Server引擎过程中执行的一组迭代,而不是SQL与PL/SQL之间的交替。这减少了两个引擎间上下文切换的额外负担。缺点是:如果任何数据值产生了无效的更新(UPDATE),整组迭代都将被退回。

要避免这一问题,可以允许完成一些UPDATE迭代,但返回失败的迭代列表。Oracle 9i引入了完成这一操作的两个语法元素:FORALL的SAVE EXCEPTIONS子句,以及名为SQL% BILK_EXCEPTIONS的指针属性。

SQL% BILK_EXCEPTIONS是一个复杂的数据类型(记录),它有两个域:ERROR_INDEX是产生错误的迭代,ERROR_CODE是描述错误的Oracle错误信息号码。(应用SQLERRM函数可获得完整的信息文本。)

在中,我在OE模型中建立了一个SALES_QUOTA表格。试图从ORDERS表格中的现有数据中装载表格,却没有SAVE EXCEPTIONS子句。由于计算值超出栏精度,一些行会失败。从运行的结果看,没有行,即使是包含正确数据的行,得到更新。

中FORALL中增加了SAVE EXCEPTIONS子句,在块中增加了一个EXCEPTIONS节。对SQL% BILK_EXCEPTIONS指针属性进行处理,以获得失败的迭代。每进行一次迭代,迭代所使用的SQL错误信息与数据被返回。显示了运行结果。

阅读(399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~