21.在ESQL/C中有效使用滚动游标.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
21.在ESQL/C中有效使用滚动游标

第二十一章 在ESQL/C中有效使用滚动游标 本章讨论在使用滚动游标时遇到的问题。将学习如何使滚动游标较少地占用临时表空间,以及如何克服同陈旧数据有关的问题。 为了浏览多个记录的集合,滚动游标创建了一个临时表,该临时表中存放了所有满足SELECT语句的记录,该查询语句同滚动游标相关联。 DECLARE语句把一个名字同SELECT语句相关联,它需要的内存是非常少的。 OPEN语句将建立一个内存缓冲区,需要使用该该缓冲区把记录从数据库送往应用程序,缓冲区的大小是依赖于机器的。 FETCH语句同滚动游标一起使用时,将获取所有满足SELECT语句的记录。在上面的例子里,这将是customer表中的所有记录。这些记录写到磁盘的一个临时表中,所有其它的FECTH操作从临时表中获取它们要检索的记录。 CLOSE语句释放缓冲区和删除临时表。 使用滚动游标时实际上存在两个问题:临时表可能增长得非常大,以及表中的数据可能过期或称之为陈旧。 所有满足SELECT语句的记录在检索时将被写到临时表中,这可能使得这些临时表变得非常的大,造成存储问题。例如,客户表花费134个字节存放一个记录,如果在客户表中有20,000个记录,而且SELECT了所有的记录,临时表将占用超过2兆字节的空间来存放检索的记录。 滚动游标还有第二个问题。一旦记录读入到临时表中,所有后续的FETCH操作从该临时表获取记录。这意味着如果其他用户从客户表修改或删除记录,这些变化不会反映到临时表中,除非滚动游标再次打开。 一旦明白了游标的原理,解决办法陈述起来就十分容易。 为减少创建的临时表的大小,可以SELECT较少的记录或字段。 为避免陈旧数据,应确保在把记录显示给用户之前,从实际的表中重新获取记录的内容。下面几页描述了一个推荐使用的过程。 为实现该解决方法,使用两个游标。第一个游标,如上所示,仍是一个滚动游标,但是,它仅从客户表选择主键,而不是查询所有的字段。 每次执行针对该游标的FETCH操作时,只把主键值装入到程序变量中。该值在第二个游标中使用,定义的第二个游标基于第一个游标提供的主键查询整个记录。 定义第二个游标来选择整个记录。每次针对第一个游标执行FETCH操作时,针对第二个游标使用OPEN/FETCH操作。 该OPEN/FETCH操作序列将迫使第二个游标每次从实际的表中获取记录。第二个游标要FETCH的记录是基于第一个游标提供的值。 第一个游标是一个用于主键的滚动游标,它使你可以在主键的列表中前后移动。 第二个游标不是一个滚动游标,它根据第一个游标提供的值从磁盘上获取记录信息,从而避免了陈旧数据。在这里可以使用一般的SELECT语句,但是从性能上考虑推荐使用游标。 融海咨询 INFORMIX-ESQL/C 应用开发 在ESQL/C中有效使用滚动游标 21 - 1

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档