返回首页

gbase数据、南大通用产品文档:GBase8s版本兼容

更新日期:2024年09月11日

该版本为重大升级,因此与GBase 8s V8.8_3.5.0版本不能兼容,升级时需通过数据导入
导出(dbexport/dbimport)方式实现。
3 新特性说明

sqlbreakcallback() 函数允许您指定超时间隔,并注册 callback 函数。当数据库服务器
正在处理 SQL 请求时,该 callback 函数为应用程序提供重新获得控制的方法。

限制:
如果您的 GBase 8s ESQL/C 应用程序使用共享内存
(onipcshm)
作为 nettype
来连接到 GBase 8s 数据库服务器,则请不要使用 sqlbreakcallback() 函数。共享内不能不
是真正的网络协议,且不处理支持 callback 函数所需要的 nonblocking I/O。当您随同共享
内存使用 sqlbreakcallback() 时,该调用看来似乎成功地注册 callback 函数(它返回零);
然而,在 SQL 请求期间,该应用程序从不调用 callback 函数。

语法

mint sqlbreakcallback(timeout, callbackfunc_ptr);
int4 timeout;
void (* callbackfunc_ptr)(int status);
timeout
在应用程序进程重新获得控制之前,SQL 请求等待执行的时间间隔。
此值可为如下:
-1
清除 timeout 值。
0
立即调用 callbackfunc_ptr 指示的函数。
>0
将超时间隔设置为在该应用程序调用 callbackfunc_ptr 指示的函数之前经过的毫秒数。

timeout 参数是一 4 字节变量。
此参数依赖于操作系统:
它可为 int、
long 或 short 数
据类型的变量。
callbackfunc_ptr
执行用户定义的 callback 函数的指针。


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

用法
在您以 sqlbreakcallback() 注册 callback 函数之后,应用程序在执行 SQL 请求的三
个不同的点处调用此函数。callback 函数的 status 参数中的值指示应用程序在哪个点调用
该函数。下表总结 status 值。

调用 callback 函数的时刻
status 参数的值
当数据库服务器开始处理 SQL 请
求时
status = 1
在数据库服务器执行 SQL 请求时,
当已经过了超时间隔时
status = 2
当数据库服务器完成 SQL 请求的
处理时
status = 0

当您以 status 值 2 调用 callback 函数时,callback 函数可确定数据库服务器是否可
以下列行动之一来继续处理:
它可调用 sqlbreak() 函数来取消该 SQL 请求。
它可忽略 sqlbreak() 调用,来继续该 SQL 请求。

该 callback 函数,
以及任何它的子例程,
仅可包含下列 GBase
8s
ESQL/C
控制函数:sqldone()、sqlbreak() 和 sqlbreakcallback()。

如果您以 timeout 值零来调用 sqlbreakcallback(),
则 callback 函数立即执行。
callback
函数多次执行,直到它包含对 sqlbreakcallback() 的调用来以下列行动之一重新定义该
callback 函数为止:
它解除该 callback 函数的关联,来终止该 callback 函数的调用,如下:
sqlbreakcallback(-1L, (void *)NULL);
它定义某个其他的 callback 函数,或将 timeout 值重置为非零值,如下:
sqlbreakcallback(timeout, callbackfunc_ptr);

重要: 小 timeout 值可能反而影响您的应用程序的性能。

在您调用 sqlbreakcallback() 函数之前,您必须建立数据库服务器连接。在连接期间,
callback 函数保持有效,或直到 sqlbreakcallback() 函数重新定义该 callback 函数为止。


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

返回代码
0
sqlbreakcallback() 调用成功。
<0
sqlbreakcallback() 调用不成功。

取值:[0|1]
默认值:0
说明:sql_trace 输出文件模式。
如果是共享,文件为gbase_execution_plan.trc
如果不是共享根据gbase_instance_name+user+thd+time 构造文件。
修改方式:可使用set 语句修改值也可在配置文件中修改值。适用于global 范围。