- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
19.在ESQL/C程序中使用BYTE和TEXT数据类型
第十九章
在ESQL/C程序中使用BYTE和TEXT数据类型
本章的目标列在上面。
可以在嵌入语言中SELECT、INSERT或UPDATE任何类型的BLOB值(BYTE或TEXT)。这是通过设置一个定位器或loc_t变量来完成的,loc_t是一种特殊类型的宿主变量。
假定定位变量正确设置,则上面的三种语句允许使用。
为在ESQL/C程序中使用BLOB变量的定位器,必须包括进两个语句。第一个语句是:$include locator,它将把locator.h头文件包括进用户的ESQL/C程序。该语句的另一种形式是#include (locator.h(。这两种语句形式的区别在于,第一种形式是由ESQL/C预编译器处理,而第二种形式由C的预编译器处理。虽然它们在功能上是等价的,但推荐使用第一种语句形式,因为它说明的头文件是特定于ESQL/C的。
必须包括进来的第二个语句是定义程序中要使用的任何BLOB定位变量。定义BLOB定位变量的语法是:$locator varname; ,使用时,用变量名代替varname。该语句的另一种形式是:$loc_t varname; 。虽然这两种形式在功能上是等价的,但推荐使用第一种形式,因为它使得变量类型对于阅读程序的人来说含义更清晰。
一旦定义好了变量,就能在程序中使用它们。
数据类型locator是loc_t结构的同义词,该结构用来处理BYTE和TEXT类型的数据对象。loc_t结构在向数据库中插入数据时,描述数据对象的来源,而在获取数据时,描述数据对象获取后存放的目的。
loc_t结构不存放数据,它只存放定位数据的来源和目的的信息。
因为用户进程和数据库进程都要访问loc_t结构,该结构中的域指定为USER、SYSTEM和INTERNAL三者之一。
指定为USER的域应当由用户程序设置,然后由数据库引擎进程来查看。
指定为SYSTEM的域由数据库引擎设置,并由用户程序检查。
指定为INTERNAL的域存放数据库引擎要使用的数据,用户不需要查看里面的内容。
BLOB可以用下面的四种方法来操作:
可以在用户内存中操作BLOB。
可以操作UNIX文件中的BLOB,用户提供文件名,让数据库服务器进程打开和关闭该文件。
可以操作UNIX文件中的BLOB,用户打开和关闭文件,把文件描述符提供给引擎进程。
可以通过用户自己编写的函数来操作BLOB。用户自定义函数在这里不作详细讨论。
这些不同的操作办法是通过设置loc_t结构中的相应的元素来选择的。由用户设置的loc_t结构中的头一个元素是loc_loctype,它是根据上面的对BLOB操作的四种不同方法来设置的:
loc_loctype值 操作方法 用户内存 LOCMEMORY 命名文件 LOCFNAME 文件描述符 LOCFILE 用户定义函数 LOCUSER loc_t结构的其它元素,以及locator.h文件中的其它内容在后面将详细介绍。
locator.h是一个C的头文件,它位于$INFORMIXDIR/incl/esql目录。在它里面定义了结构loc_t,用来在ESQL/C程序中操作BLOB,另外还定义了一些宏以方便该结构的使用。loc_t结构的主要组成部分是一个称为联合(union)的可变记录,它的设置依赖于loc_loctype值的设置。上面列出了loc_loctype可能的值:
LOCMEMORY,LOCFNAME,LOCFILE,LOCUSER
这些符号常数定义在文件locator.h的末尾,locator.h文件的最后部分还定义了一些别的宏。上面列出的那些定义的宏使得可以使用符号常数,而不必使用它们代替的实际值。例如,如果要使用命名文件来操作BLOB,必须把loc_loctype设置为适当的值。如果我们知道该值是2,可以这样赋值:loc_loctype=2,但这么做不易理解,因为对于所做的事情没有任何提示。如果使用定义好的宏,赋值语句变成:loc_loctype=LOCFNAME,这样可以清楚地理解正在进行的操作。
定义了四个宏,各自对应于loc_loctype可能取的值。当我们想在用户内存中操作BLOB时,使用LOCMEMORY。如果提供文件名,操作文件中的BLOB时,使用LOCFNAME。如果提供的是文件描述符,操作文件中的BLOB时,使用LOCFILE。当我们使用自定义的函数来操作BLOB时,使用LOCUSER。
loc_t结构中包含了C语言中的几个可以认为是比较高级的语法元素。头一个就是UNION结构,如上面的代码所示。当一个结构可以包含有几种可能的子结构之一时使用UNION结构。在loc_t的情形里,如果是在用户内存(lc_memory结构)中操作BLOB,我们需要某种信息;如果是通过UNIX文件(lc_fi
文档评论(0)