返回首页

gbase数据、南大通用产品文档:GBase8s一起使用 OPTOFC 与 延迟的 PREPARE

更新日期:2024年09月11日

要获得在客户机应用程序与数据库服务器之间消息的最优数目,请一起使用“优化
OPEN、FETCH、CLOSE”特性与“延迟的 PREPARE”特性。

然而,当您一起使用这两种优化特性时,请记住下列要求:
如果在语句文本中存在语法错误,
直到数据库服务器执行 FETCH,
它才返回该错误。
GBase 8s ESQL/C 不将 PREPARE、DECLARE 和 OPEN 语句发送至数据库服务器,
直到它执行 FETCH 语句为止。因此,直到数据库服务器执行 FETCH 语句,才能得到任
何这些语句生成的任何错误。

您必须使用 GET DESCRIPTOR 语句的特殊情况来获得准备好的语句的 DESCRIBE
信息。
DESCRIBE 语句的典型使用,是在 PREPARE 确定关于该准备好的语句的信息之后
执行它。
然而,
随同同时启用的 OPTOFC 和“延迟的 PREPARE”特性,
GBase 8s ESQL/C 不
将 DESCRIBE 语句发送至数据库,直到它达到 FETCH 语句为止。要允许您获取关于准
备好的语句的信息,GBase 8s ESQL/C 执行类似于 SET DESCRIPTOR 语句的语句来获得

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

准备好的语句的数据类型、长度和其他系统描述符字段。然后,您可在 FETCH 之后使用
GET DESCRIPTOR 语句来获取此信息。

而且,
当数据类型为内建的数据类型时,
GBase 8s ESQL/C 仅可在 GET DESCRIPTOR
语句中的主变量上执行数据转换。对于 opaque 数据类型和复合的数据类型(集合和 row
类型),数据库服务器总是以其原本的格式将数据返回至客户机应用程序。然后,您可在
GET DESCRIPTOR 语句之后对此数据执行数据转换。

例如,数据库服务器以其内部的(二进制)格式从 opaque 类型列返回数据。因此,
您的 GBase 8s ESQL/C 程序必须将列数据放置到 var binary
(或 fixed binary)
主变量内,
当它执行 GET DESCRIPTOR 语句时。
var binary 和 fixed binary 数据类型以其内部的格
式保存 opaque 类型数据。您不可使用 lvarchar 主变量来保存该数据,因为 GBase 8s
ESQL/C 不可将 opaque 类型数据从其内部的(它从数据库服务器收到的)格式转换为其
外部的(lvarchar)格式。

当同时启用“延迟的 PREPARE”与 OPTOFC 特性时,FetArrSize 特性不奏效。当启
用这两个特性时,直到 FETCH 完成之后,GBase 8s ESQL/C 才知道行的大小。到此时,
要以 FetArrSize 值来调整访存缓冲区为时已晚。

提示:
要获得最大的优化,
请一起使用 OPTOFC、
“延迟的 PREPARE”与 AUTOFREE
特性。

功能说明
通过动态SQL,
动态游标OPEN 语句中的SELECT 语句可以由文本字符串或者内
容为文本字符串的用户变量表示。
语法
OPEN cursor_name FOR select_statement
表5- 188 参数说明
参数名称


cursor_name
动态游标名
select_statement
打开动态游标的动态SQL 语句。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1371
示例
示例1:SELECT * FROM hunter.t1
DECLARE cur REF CURSOR;
SET v = 'SELECT * FROM hunter.t1';
SET @sql_str = v;
OPEN cur FOR @sql_str;
FETCH cur INTO i, j;

当前新建的脚本文件“GBase
Script1.gbase”的内容在编辑后会在标题的
名字后面显示“*”
,此时可使用
“Ctrl
+
S”
保存定义,或者点击Visual
Studio
的“标准”工具条上的
按钮保存。