GBase8s ESQL/C的Ifx_lo_t 数据类型支持SQL数据类型BLOB和CLOB
访问智能大对象,需要三种数据结构的配合。
1. 智能大对象的描述结构, ifx_lo_create_spec_t
2. 智能大对象指针结构, ifx_lo_t
3. 智能大对象描述符
Ifx_lo_create_spec_t是一个ESQL/C内部数据结构,没有公布其内部成员,但是提供了一系列函数来访问其内部成员。
Ifx_lo_create_spec_t保存了如下存储信息:
1. 智能大对象的磁盘存储信息
2. 创建时间。
智能大对象的磁盘存储信息:
数据库服务器根据磁盘存储信息,更高效的保存智能大对象。
磁盘存储信息 | 描述 | ESQL/C函数 |
预估的智能大对象的大小,单位为字节数 | 预估的智能大对象的大小,单位为字节数,数据库服务器根据该值,来确定保存智能大对象需要的扩展(extents)数量。如果该值设定的不正确,并不会引发错误的结果。但是,意味着数据库服务器不能使用合适的扩展(extents)来保存智能大对象。 | Ifx_lo_specget_estbytes() Ifx_lo_specset_estbytes() |
最大字节数 | 智能大对象的最大长度。 | ifx_lo_specget_maxbytes() Ifx_lo_specset_maxbytes() |
分配扩展(extents)大小 | 分配扩展(extents)大小的单位是千字节。理想情况下,分配扩展是一个扩展,包含所有的智能大对象的数据。 数据库服务器按照分配扩展大小来分配空间,试图将分配扩展放在通过一个chunck中。如果chunk中没有足够大的空间,数据库服务器将占用多个扩展。 | Ifx_lo_specget_extsz() Ifx_lo_specset_extsz() |
sbspace的名称 | 容纳智能大对象的sbspace的名称。最长18字节,并以空字符结尾。 | Ifx_lo_specget_sbspace() Ifx_lo_specset_sbspace() |
对于大多数应用来说,建议 直接使用数据服务器指定磁盘存储信息,不要进行修改。
创建时间:
在ifx_lo_create_spec_t中保存了创建时间的标记,该标记指示数据库服务器将适当的信息保存到智能大对象上。
类型 | 创建时间标记 | 描述 |
日志相关 | LO_LOG | 数据库服务器在系统日志中保存智能大对象的变化。 使用LO_LOG标记时,请确认系统日志足够大,能够保存智能大对象的变化信息。 |
LO_NOLOG | 不记录与智能大对象相关的操作到系统日志。 | |
最后访问时间 | LO_KEEP_LASTACCESS_TIME | 数据库服务器保存智能大对象的最后访问时间。 |
LO_NOKEEP_LASTACCESS_TIME | 数据库服务器保存智能大对象的最后访问时间。 |
使用ifx_lo_specset_flags(), ifx_lo_specget_flags()操作上述标记。
智能大对象的存储属性是如何获得的?
下面的图中,进行了说明:


1. 优先从数据库服务器的存储属性中获得, 系统设定或配置文件ONCONFIG
2. sbspace的存储特性, 在创建sbspace时指定的。
3. 列级别的存储特性,在执行创建表语句时指定的。
4. 用户定义的存储特性。使用ESQL/C的接口函数指定。




