返回首页

gbase数据、南大通用产品文档:GBase8s访存行

更新日期:2024年09月11日

程序使用 FETCH 语句来检索输出的每一行。此语句命名游标,且还可命名接收该数据的
主变量。下列示例展示完整的 GBase 8s ESQL/C 代码:
EXEC SQL DECLARE the_item CURSOR FOR
SELECT order_num, item_num, stock_num
INTO :o_num, :i_num, :s_num
FROM items;
EXEC SQL OPEN the_item;
while(SQLCODE == 0)
{
EXEC SQL FETCH the_item;
if(SQLCODE == 0)
printf("%d, %d, %d", o_num, i_num, s_num);
}

检测数据的结束
在前面的示例中,WHILE 条件在 OPEN 语句返回错误时阻止执行循环。当将 SQLCODE
设置为 100 来标志数据的结束时,
相同的条件会终止该循环。
然而,
该循环包含 SQLCODE
的测试。
此测试是必需的,
因为如果 SELECT 语句是有效的但找不到相匹配的行,
则 OPEN
语句返回零,但第一次访存返回 100(数据的结束)并不返回任何数据。下列示例展示编写
同一循环的另一种方式:
EXEC SQL DECLARE the_item CURSOR FOR
SELECT order_num, item_num, stock_num
INTO :o_num, :i_num, :s_num
FROM items;
EXEC SQL OPEN the_item;
if(SQLCODE == 0)
EXEC SQL FETCH the_item; /* fetch 1st row*/
while(SQLCODE == 0)
{
printf("%d, %d, %d", o_num, i_num, s_num);
EXEC SQL FETCH the_item;

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 213 -

}
在此版本中,
早已处理了无返回行的情况,
因此,
在循环中不存在第二次 SQLCODE 测试。
由于 SQLCODE 测试的时间成本是访存成本的很小一部分,
因此这些版本在性能上没有多
大差异。

定位 INTO 子句
INTO 子句命名要接收数据库服务器返回的数据的主变量。
INTO 必须出现在 SELECT 或
FETCH 语句中。然而,它不可同时出现在两个语句中。下列示例指定 FETCH 语句中的
主变量:
EXEC SQL DECLARE the_item CURSOR FOR
SELECT order_num, item_num, stock_num
FROM items;
EXEC SQL OPEN the_item;
while(SQLCODE == 0)
{
EXEC SQL FETCH the_item INTO :o_num, :i_num, :s_num;
if(SQLCODE == 0)
printf("%d, %d, %d", o_num, i_num, s_num);
}
此形式允许您将不同的行访存到不同的位置内。例如,您可以使用此形式来将连续的行访
存到数组的连续元素内。

参数说明:当前连接请求当中,所使用的客户端名称。
该参数属于USERSET 类型参数,请参考表15-1 中对应设置方法进行设置。
在备机请求主机进行日志复制时,
如果该参数非空串,
那么会被用来作为备机在主机上
的流复制槽名字。此时,如果该参数长度超过61 个字节,那么流复制槽名字只会截取使用
前61 个字节的字符。
取值范围:字符串。
默认值:空字符串(连接到后端的应用名,以实际安装为准)

bigintcvint2() 函数将 int2 类型数值转换为 BIGINT 类型数值。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 606 -
语法
mint bigintcvint2(int2v, bigintp)
const int2 int2v
bigint *bigintp
int2v
要转换为 bigint 值的 int2 值。
bigintp
指向包含转换的结果的 bigint 变量的指针。

返回代码
0
转换成功。
<0
转换失败。