返回首页

gbase数据、南大通用产品文档:GBase8sifx_lo_open() 函数

更新日期:2024年09月11日

ifx_lo_open() 函数打开现有的智能大对象来访问。

语法

mint ifx_lo_open(LO_ptr, flags, error)
ifx_lo_t *LO_ptr;
mint flags;
mint *error;
LO_ptr
指向标识要打开的智能大对象的 LO-pointer 结构的指针。
flags
指定 LO_ptr 标识的智能大对象以何种方式打开的 mint。
error
指向包含 ifx_lo_open() 设置的错误代码的 mint 的指针。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 782 -


用法
对于它需要访问的每一智能大对象的实例,您的 GBase 8s ESQL/C 程序必须调用
ifx_lo_open() 函数。

在 ifx_lo_open() 成功地完成之后,flags 参数的值指示智能大对象的模
式。要了解 flags 参数的有效值的描述,请参阅 表 1。

GBase 8s 使用 ifx_lo_open()(或 ifx_lo_create())建立的缺省参数,
来确定后续的操作是否导致对于智能大对象的锁定或记录日志。

每一 ifx_lo_open() 调用都隐式地与当前连接相关联。当此连接关闭时,数据库服务
器释放任何列都不引用的任何智能大对象(其引用计数为零的那些)。

如果 ifx_lo_open() 函数成功,则它返回有效的 LO 文件描述符(LO_fd)。然后,您
可使用该文件描述符来标识在后续的函数调用中访问哪个智能大对象,诸如 ifx_lo_read()
和 ifx_lo_write()。LO_fd 仅在当前数据库连接之内有效。

在 ifx_lo_open() 已打开了智能大对象之后,它将放回的 LO 文件描述符中的搜寻位
置设置为字节 0。如果为了锁定整个智能大对象而设置锁定的缺省范围,则 ifx_lo_open()
函数还可取得智能大对象上的锁,基于访问模式的下列设置:
对于 dirty-read 模式,数据库服务器不在智能大对象上放置锁。
对于 read-only 模式,数据库服务器在智能大对象上取得共享锁。
对于 write-only、write-append 或 read-write 模式,数据库服务器在智能大对象上取
得更新锁。
当发生对 ifx_lo_write() 或 ifx_lo_writewithseek() 函数的调用时,
数据库服务器
将该锁提升为排他锁。

当当前事务终止时,
ifx_lo_open() 取得的锁丢失。
然而,
当需要锁的下一函数执行时,
数据库服务器在此取得该锁。如果不需要此行为,请使用 BEGIN WORK 事务块,并在需
要使用该锁的最后一条语句之后放置 COMMIT WORK 或 ROLLBACK WORK 语句。

返回代码
-1
函数不成功;请检测该错误的详尽错误代码。
有效的 LO 文件描述符

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 783 -

函数已成功地打开了智能大对象,并返回了有效的 LO 文件描述符。

SQLDataSources 列出数据源名称。
下表描述了 SQLDataSources 的 SQLSTATE 和错误值。
SQLSTATE
错误值
错误消息
01000
-11001
General warning
01004
-11003
Data truncated
S1000
-11060
General error
S1001
-11061
Memory-allocation failure
S1090
-11071
Invalid string or buffer length
S1103
-11083
Direction option out of range

创建完UDAF 后,跟使用普通的内置函数一样使用UDAF 函数。
如下示例,
使用UDAF 函数newest 来查找字段n1 最大值的所在行的字段quantity
值。
drop function newest;
CREATE AGGREGATE FUNCTION newest RETURNS STRING SONAME 'newest.so';
drop table if exists t;
create table t(n1 date,quantity
varchar(10));
insert into t values('2011-01-01','aa');
insert into t values('2012-02-01','bb');
insert into t values('2012-01-02','cc');
gbase> select newest(n1,quantity) from t;
+---------------------+
| newest(n1,quantity) |
+---------------------+
| bb
|
+---------------------+
1 row in set (Elapsed: 00:00:00.01)