18.在ESQL/C程序中使用插入游标.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
18.在ESQL/C程序中使用插入游标

第十八章 在ESQL/C程序中使用插入游标 本章介绍在INFORMIX-ESQL/C程序中定义和使用插入游标。 有两种方法可以向数据库中添加记录:一次添加一条记录或一次添加多条记录。INSERT语句允许向数据库中插入一个记录。如果把INSERT语句放在循环中,用户可以向数据库插入多条记录,但是,对于每一次循环INSERT语句只执行一次。每次执行INSERT语句时,设置_sqibind结构,并把该结构包的内容送往数据库服务器,在那里进行I/O操作。 如果有许多的记录要添加到表中,送往数据库服务器的结构包的数量和I/O操作的数目可能极大地影响系统的性能。由于这个原因,通常的INSERT语句无法提供一种对表进行多记录插入的灵活办法。如果INSERT语句可以把多个记录存放到一个缓冲区中,然后把缓冲区(一个包)送往数据库服务器进行一次“大”的插入,则该问题就被解决了。实际上,可以使用INFORMIX-ESQL/C的插入游标完成该项功能。 插入缓冲区在通过INFORMIX-ESQL/C设置时,是依赖于系统的,而且它的大小不能改变。在一般情形里,它从1k和记录大小两者中取一大值。 同插入游标相关联的语句有五个: DECLARE OPEN PUT FLUSH CLOSE 这些语句将在后面讨论。 DECLARE语句用来同INSERT语句相关联。如果有VALUES子句,它还绑定宿主变量的类型、大小和地址。 该语句必须出现在任何对游标的引用之前,如果没有这样做,编译时会出错或给出警告信息。 OPEN语句完成下面的工作: 发送消息给服务器,让它检查INSERT语句中表和字段的合法性。 是否有一个名称为manufact的表? 要插入值的字段是否都属于该表? 是否有权限插入记录? 在数据段中打开插入缓冲区。 如果游标已经打开,又对同一个游标执行OPEN语句,即试图重新打开游标,INFORMIX-ESQL/C写缓冲区中的内容,并重新初始化游标结构。全局变量sqlca.sqlerrd[2]的值被设置为实际插入到数据库中的记录的数目。 可能已经注意到用于INSERT语句的OPEN语句的语法,同用于所有三种类型的SELECT游标:一般的、加锁的和滚动的一样。 使用PUT语句,可以把一个记录存放到INSERT缓冲区,以后再插入到数据库表中。 全局变量sqlca.sqlcode和sqlca.sqlerrd[2]指明每次PUT语句执行的结果。 如果INFORMIX-ESQL/C仅把一个记录存放到插入缓冲区,它把sqlca.sqlcode和sqlca.sqlerrd[2]的值都设置为0。 如果由于执行了PUT语句,使INFORMIX-ESQL/C进行一个FLUSH操作,并成功地把一组(整个缓冲区)记录插入到数据库中,则sqlca.sqlcode的值设置为0,而sqlca.sqlerrd[2]的值设置为所插入记录的数目。 如果由于执行了PUT语句,使INFORMIX-ESQL/C进行一个FLUSH操作,并试图把整个缓冲区的记录插入到数据库中,但是操作不成功,则sqlca.sqlcode的值设置为负值(特别地,设置为错误信息的号码),而sqlca.sqlerrd[2]的值设置为成功插入到数据库中的记录的数目。在上次成功插入记录之后的缓冲区中的记录被丢弃。 使用FLUSH语句使得INFORMIX-ESQL/C把缓冲区中的记录插入到数据库中,而不关闭游标。 可以使用FLUSH语句强迫进行插入操作。但是,无法通过不使用FLUSH语句来延迟插入,因为缓冲区满了,INFORMIX-ESQL/C会自动腾空缓冲区。 全局变量sqlca.sqlcode和sqlca.sqlerrd[2]指明每次FLUSH语句执行的结果。如果INFORMIX-ESQL/C成功地把缓冲区里的记录插入到数据库中,它把sqlca.sqlcode的值设置为0,而把sqlca.sqlerrd[2]的值设置为所插入记录的数目。如果INFORMIX-ESQL/C试图把缓冲区里的记录插入到数据库中,但是操作不成功,它把sqlca.sqlcode的值设置为负值(特别地,设置为错误信息的号码),而把sqlca.sqlerrd[2]的值设置为成功插入到数据库中的记录的数目。 退出程序之前如果没有关闭游标,则缓冲区的内容不会写入到数据库中。自从上次FLUSH操作(不论是显式的还是隐式的操作)以来写入到缓冲区中而且仍保存在里面的记录会丢失。不要期望程序结束时会关闭缓冲区并把缓冲区中的内容写到数据库中。 CLOSE语句腾空缓冲区,并使INSERT游标和INSERT缓冲区失效。缓冲区内存被释放。使用FREE语句释放游标结构占用的空间: $free insert_buf; 全局变量sqlca.sqlcode和sqlca.sqlerrd

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档