18.在ESQL/C程序中使用插入游标.doc_第1页
18.在ESQL/C程序中使用插入游标.doc_第2页
18.在ESQL/C程序中使用插入游标.doc_第3页
18.在ESQL/C程序中使用插入游标.doc_第4页
18.在ESQL/C程序中使用插入游标.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

融海咨询INFORMIX-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和记录大小两者中取一大值。同插入游标相关联的语句有五个:l DECLARE l OPENl PUTl FLUSHl CLOSE这些语句将在后面讨论。DECLARE语句用来同INSERT语句相关联。如果有VALUES子句,它还绑定宿主变量的类型、大小和地址。该语句必须出现在任何对游标的引用之前,如果没有这样做,编译时会出错或给出警告信息。OPEN语句完成下面的工作:l 发送消息给服务器,让它检查INSERT语句中表和字段的合法性。- 是否有一个名称为manufact的表?- 要插入值的字段是否都属于该表?- 是否有权限插入记录?- 在数据段中打开插入缓冲区。l 如果游标已经打开,又对同一个游标执行OPEN语句,即试图重新打开游标,INFORMIX-ESQL/C写缓冲区中的内容,并重新初始化游标结构。全局变量sqlca.sqlerrd2的值被设置为实际插入到数据库中的记录的数目。l 可能已经注意到用于INSERT语句的OPEN语句的语法,同用于所有三种类型的SELECT游标:一般的、加锁的和滚动的一样。使用PUT语句,可以把一个记录存放到INSERT缓冲区,以后再插入到数据库表中。全局变量sqlca.sqlcode和sqlca.sqlerrd2指明每次PUT语句执行的结果。l 如果INFORMIX-ESQL/C仅把一个记录存放到插入缓冲区,它把sqlca.sqlcode和sqlca.sqlerrd2的值都设置为0。l 如果由于执行了PUT语句,使INFORMIX-ESQL/C进行一个FLUSH操作,并成功地把一组(整个缓冲区)记录插入到数据库中,则sqlca.sqlcode的值设置为0,而sqlca.sqlerrd2的值设置为所插入记录的数目。l 如果由于执行了PUT语句,使INFORMIX-ESQL/C进行一个FLUSH操作,并试图把整个缓冲区的记录插入到数据库中,但是操作不成功,则sqlca.sqlcode的值设置为负值(特别地,设置为错误信息的号码),而sqlca.sqlerrd2的值设置为成功插入到数据库中的记录的数目。在上次成功插入记录之后的缓冲区中的记录被丢弃。使用FLUSH语句使得INFORMIX-ESQL/C把缓冲区中的记录插入到数据库中,而不关闭游标。l 可以使用FLUSH语句强迫进行插入操作。但是,无法通过不使用FLUSH语句来延迟插入,因为缓冲区满了,INFORMIX-ESQL/C会自动腾空缓冲区。l 全局变量sqlca.sqlcode和sqlca.sqlerrd2指明每次FLUSH语句执行的结果。如果INFORMIX-ESQL/C成功地把缓冲区里的记录插入到数据库中,它把sqlca.sqlcode的值设置为0,而把sqlca.sqlerrd2的值设置为所插入记录的数目。如果INFORMIX-ESQL/C试图把缓冲区里的记录插入到数据库中,但是操作不成功,它把sqlca.sqlcode的值设置为负值(特别地,设置为错误信息的号码),而把sqlca.sqlerrd2的值设置为成功插入到数据库中的记录的数目。退出程序之前如果没有关闭游标,则缓冲区的内容不会写入到数据库中。自从上次FLUSH操作(不论是显式的还是隐式的操作)以来写入到缓冲区中而且仍保存在里面的记录会丢失。不要期望程序结束时会关闭缓冲区并把缓冲区中的内容写到数据库中。CLOSE语句腾空缓冲区,并使INSERT游标和INSERT缓冲区失效。缓冲区内存被释放。使用FREE语句释放游标结构占用的空间:$free insert_buf;l 全局变量sqlca.sqlcode和sqlca.sqlerrd2指明每次CLOSE语句执行的结果。l INFORMIX-ESQL/C没有提供全局变量来记录由INSERT游标成功插入到数据库中的记录的数目。如果想知道所插入记录的总数目,必须在程序中设置一个计数器,并在执行每次PUT语句时,增加计数器的值。l 在使用INSERT游标之前必须先用DECLARE语句来定义它。l 使用DECLARE语句定义游标后,用OPEN语句打开它。l 一旦打开了INSERT游标,就有了INSERT缓冲区,可以用PUT语句把数据放入INSERT缓冲区。l FLUSH语句是可选择的,通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论