在PL/SQL中处理批量绑定异常

ZDNet软件频道 时间:2006-09-07 作者:Builder |  我要评论()
本文关键词:sql oracle SQL Server
在PL/SQL中,批量绑定是高效处理动态DML的一种重要手段。它不用在程序内循环,每次迭代提交一个UPDATE语句;你可以使用FORALL语句提交一个含有绑定变量的单独UPDATE语句。

在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函数可获得完整的信息文本。)

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

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

Bob Watkins(OCP, MCDBA, MCSE, MCT)是一个有着25年经验的计算机专业人士,曾做过技术培训师、顾问与数据库管理员。

责任编辑:张琎

查看本文的国际来源

sql

oracle

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134