博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

Unix爱好者家园

卓越源代码  
   sdccf.cublog.cn
关于作者  
姓名:sdccf
职业:chinapost
年龄:36
位置:sd
个性介绍:

我的分类  




DB2 9 应用开发(733 考试)认证指南,第 8 部分: 高级编程(4)

用户定义的数据类型、并发性考虑因素等等

developerWorks



复合 SQL

何时使用复合 SQL

SQL 语句通常要逐句执行。这使得编程更加容易,但是也意味着必须在客户机和服务器之间传送每个语句和每个结果集。为了减少应用程序所生成的网络流量,可以将多个 SQL 语句编为一个组。这个组则称作复合 SQL(compound SQL)。复合 SQL 通常用在服务器端对象中,比如存储过程和用户定义的函数,也用在嵌入式 SQL 应用程序中。

有两种类型的复合 SQL:原子的(atomic)和非原子的(non-atomic)。

对于原子的 SQL,当所有子语句成功完成时,或者当某个子语句失败时,应用程序会从数据库管理器接收一个响应。如果一个子语句失败,那么会将整个组视作失败,该组中对数据库所做的任何更改都被回滚。

对于非原子的 SQL,当所有子语句完成时,应用程序会从数据库管理器接收一个响应。无论前一子语句是否成功完成,组中的每个子语句都会执行。只有在回滚包含非原子复合 SQL 的工作单元时,才可以回滚该语句组。





回页首


复合 SQL:优点和缺点

使用复合 SQL 有一些优点:

  • 可以减少网络流量,因为只会传送最初的 SQL 块和最终的结果集。
  • 可以提高应用程序的整体速度,因为更多工作是在服务器而不是客户机上执行的。

但是,使用复合 SQL 也有一些缺点:

  • 只能从执行的整个 SQL 语句组接收一条错误消息。
  • 如果发生错误,就无法判断是哪个 SQL 语句失败了。

图 3 是一个使用复合 SQL 造成网络流量下降的示例。更多的线表示更大的网络流量。网络流量的下降完全依靠复合 SQL 中 SELECTINSERTUPDATEDELETE 语句的平衡。


图 3. 网络流量:用和不用复合 SQL
网络流量:用和不用复合 SQL

在下列几种情况下,建议使用复合 SQL:

  • 将在 SQL 语句块中来回发送大量数据。使用复合 SQL 可以减少网络流量。
  • 您有一个反应迟缓的客户机,但是希望利用高速的服务器。使用复合 SQL 可以确保在服务器上进行处理,并仅将最后的结果发送回客户机。




回页首


使用复合 SQL

复合语句块以 BEGIN 关键字开始,并以 END 关键字结束。以下是一个示例:

BEGIN ATOMIC
    UPDATE employee
        SET salary = salary * 1.1
        WHERE edlevel > 12;

    UPDATE dept
        SET budget = budget * 0.8
        WHERE profitMargin > 10;

    INSERT INTO deptList (empno,salary)
	VALUES (SELECT empno,salary
		 FROM employee WHERE edlevel = 15);
END

如果以上的复合语句在第一个 UPDATE 语句就失败了,将无法判断是哪个语句失败了。构造这个复合语句的优点是,发送给服务器并返回的数据仅仅是 SQL 语句和最后的 SQL 返回码。

 发表于: 2008-05-31,修改于: 2008-05-31 23:44 已浏览460次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:4.84104

京ICP证041476号