返回首页

gbase数据、南大通用产品文档:GBase8a静态游标(CURSOR)

更新日期:2024年09月11日

概述
由SELECT 语句返回的结果集通常包括一系列的记录行,但经常有一些情况下,
并不总是能够将整个结果集作为一个单元来有效地处理。这时就需要一种机制以
便每次处理一行记录,数据库中的游标就提供了这种机制。
GBase 8a MPP Cluster 数据库的游标的定义和使用有如下限制:

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1372

静态游标,
即在DECLARE 时必须指定SELECT STATEMENT 语句的结果集
进行绑定;在后续操作中只能对于该结果集进行只读、仅向前的操作;

游标必须在声明处理器之前被声明,变量和条件必须在声明游标或处理器之
前被声明。

ifx_int8soflt() 函数将 int8 类型数值转换为 C float 类型数值。
语法
mint ifx_int8soflt(int8_val, flt_val)
ifx_int8_t *int8_val;
float *flt_val;
int8_val
指向 ifx_int8soflt() 将其值转换为 float 类型值的 int8 结构的指针。
flt_val
指向 ifx_int8soflt() 放置转换的结果处的 float 值的指针。

用法
ifx_int8soflt() 库函数将 int8 值转换为 C float。
C float 的大小依赖于您正在使用的计
算机的硬件和操作系统。

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

示例
demo 目录中的文件 int8soflt.ec 包含下列样例程序。
/*
* ifx_int8soflt.ec *

The following program converts three strings to
INT8 values and then to float values and

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

*/

#include

EXEC SQL include "int8.h";

char string1[] = "-12,555.765";
char string2[] = "480.76";
char string3[] = "5.2";

main()
{
mint x;
float f =0.0;
ifx_int8_t num1, num2, num3;

printf("\nIFX_INT8sOFLT Sample ESQL Program running.\n\n");
if (x = ifx_int8cvasc(string1, strlen(string1), &num1))
{
printf("Error %d in converting string1 to INT8\n", x);
exit(1);
}
if (x = ifx_int8cvasc(string2, strlen(string2), &num2))
{
printf("Error %d in converting string2 to INT8\n", x);
exit(1);
}
if (x = ifx_int8cvasc(string3, strlen(string3), &num3))
{
printf("Error %d in converting string3 to INT8\n", x);
exit(1);

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

printf("\nConverting INT8 to float\n");
if (x= ifx_int8soflt(&num1, &f))
{
printf("\tError %d in converting INT8 to float\n", x);
exit(1);
}
else
{
printf("String 1= %s\n", string1);
printf("INT8 value is = %f\n", f);
}
printf("\nConverting second INT8 to float\n");
if (x= ifx_int8soflt(&num2, &f))
{
printf("\tError %d in converting INT8 to float\n", x);
exit(1);
}
else
{
printf("String2 = %s\n", string2);
printf("INT8 value is = %f\n", f);
}
printf("\nConverting third INT8 to integer\n");

/* Note that the decimal places will be truncated */

if (x= ifx_int8soflt(&num3, &f))
{
printf("\tError %d in converting INT8 to float\n", x);
exit(1);
}

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 762 -
else
{
printf("String3 = %s\n", string3);
printf("INT8 value is = %f\n",f);
}
printf("\nIFX_INT8sOFLT Sample Program over.\n\n");
exit(0);
}
输出
IFX_INT8sOFLT Sample ESQL Program running.

Converting INT8 to float

Executing: ifx_int8soflt(&num1,&f)
String 1= -12,555.765
The value of the first float is = -12555.000000


Converting second INT8 to float

Executing: ifx_int8soflt(&num2, &f)
String2 = 480.76
The value of the second float is = 480.000000


Converting third INT8 to integer

Executing: ifx_int8soflt(&num3, &f)
String3 = 5.2
The value of the third float is = 5.000000
IFX_INT8sOFLT Sample Program over.

SERIAL 数据类型存储 INT 数据类型的顺序整数
(在插入新行时由数据库服务器自动
指定)。
缺省顺序起始号为 1,但可以在创建或改变表时指定初始值 n。
您可以指定正数或负数作为起始号。
如果您指定零 (0) 作为起始号,
那么使用的值是 SERIAL 列中已存在的最大正值
+ 1。
SERIAL 的最大值是 2,147,483,647。如果指定大于 2,147,483,647 的数,那么会接
收到语法错误。如果需要更大的范围,那么使用 SERIAL8 或 BIGSERIAL 数据类型,而不
是 SERIAL。
一个表只能有一个 SERIAL 列,
但是它可以具有一个 SERIAL 列和一个 SERIAL8 列或
BIGSERIAL 列。
列中的 SERIAL 值并不是自动唯一。必须对此列应用唯一索引或主键约束以防止重复
的 SERIAL 数。如果您在 DB-Access 中使用 Interactive Schema Editor 来定义该表,
那么唯一索引将自动应用于 SERIAL 列。
SERIAL 数可能不连续,原因是存在并发的用户、回滚和其他因素。
如果 column 是 SERIAL 数据类型,那么用于间接输入的 SPL 的 DEFINE variable
LIKE column 语法声明 INTEGER 数据类型的变量。

在指定了数字之后,
就不能进行更改。
您可以将值插入 SERIAL 列中
(使用 INSERT 语
句)

或如果新值与列中的任何现有值都不重复,
也可以重置 serial 列
(使用 ALTER
TABLE
语句)。要将值插入到 SERIAL 列中,数据库服务器会使前面的值增加 1(如果复位值较
大的话,那么将复位值增加 1)并将结果指定为输入值。但是,如果 ALTER
TABLE 已经将
SERIAL 列的下一个值复位为小于该列中已存在的值,那么下一个值将遵循以下公式:
(SERIAL 列中的最大现有值) + 1
例如,
当最大现有值为 128 时,
如果将 customer.customer_num 的序号值复位为 50,
那么下一个指定数将为 129。
有关 SERIAL 数据条目的更多详细信息,
请参阅 GBase
8s
SQL
指南:语法。
SERIAL 列可以存储唯一代码,
例如,
订单、
发票或客户编号。
SERIAL 数据值需要 4 个

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 107 -

字节的存储空间,并且具有与 INTEGER 数据类型相同的精度。有关将唯一整数指定给数据
库表中每一行的其他方法的详细信息,请参阅 GBase 8s SQL 指南:语法 中的 CREATE
SEQUENCE 语句。