当您不再需要引用 Select 或 Function 游标检索的行时,使用 CLOSE 子句。在 ESQL/C 中,该语句还可以刷新并关闭 Insert 游标。可在 GBase 8s ESQL/C 或 SPL 中使用此语句。
| 元素 | 描述 | 限制 | 语法 |
|---|---|---|---|
| cursor_id | 要关闭的游标的名称 | 必须已声明 | 标识符 |
| cursor_id_var | 包含 cursor_id 的值的主变量 | 必须是字符数据类型 | 必须符合特定于语言的名称规则 |
关闭游标使得游标对于除 OPEN 或 FREE 之外的任何语句无用,并释放数据库服务器已经分配到游标的资源。
在不兼容 ANSI 的数据库中,您可以关闭尚未打开的游标或已经关闭的游标。在这些情况下没有采取任何操作。
在兼容 ANSI 的数据库中,如果您关闭尚未打开的游标,那么数据库服务器返回错误。
EXEC SQL close democursor;以下是来自 demo1.ec 的 ESQL/C Source 代码示例:
#include <stdio.h>
EXEC SQL define FNAME_LEN 15;
EXEC SQL define LNAME_LEN 15;
main()
{
EXEC SQL BEGIN DECLARE SECTION;
char fname[ FNAME_LEN + 1 ];
char lname[ LNAME_LEN + 1 ];
EXEC SQL END DECLARE SECTION;
printf( "DEMO1 Sample ESQL Program running.\n\n");
EXEC SQL WHENEVER ERROR STOP;
EXEC SQL connect to 'stores7';
EXEC SQL declare democursor cursor for
select fname, lname
into :fname, :lname
from customer
where lname < "C";
EXEC SQL open democursor;
for (;;)
{
EXEC SQL fetch democursor;
if (strncmp(SQLSTATE, "00", 2) != 0)
break;
printf("%s %s\n",fname, lname);
}
if (strncmp(SQLSTATE, "02", 2) != 0)
printf("SQLSTATE after fetch is %s\n", SQLSTATE);
EXEC SQL close democursor;
EXEC SQL free democursor;
EXEC SQL create routine from 'del_ord.sql';
EXEC SQL disconnect current;
printf("\nDEMO1 Sample Program over.\n\n");
exit(0);
}