当您不再需要引用 Select 或 Function 游标检索的行时,请使用 CLOSE 子句关闭游标。
在 ESQL/C 中,该语句还可以刷新并关闭 Insert 游标。可在 GBase 8s ESQL/C 或 SPL 中使用此语句。

用法
关闭游标使得游标对于除 OPEN 或 FREE (或 OPEN FOR)之外的任何语句无用,并释放数据库服务器已经分配到游标的资源。
在不兼容ANSI 的数据库中,您可以关闭尚未打开的游标或已经关闭的游标。在这些情况下没有采取任何操作。
在兼容 ANSI 的数据库中,如果您关闭尚未打开的游标,那么数据库服务器返回错误。
示例
以下示例关闭了游标 democursor 。
EXEC SQL close democursor;
以下是来自 demo1.ec 的 ESQL/C Source 代码示例:
#include
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);
}
关闭 Select 或 Function 游标
当游标与 SQL 的 SELECT 、EXECUTE FUNCTION 或 EXECUTE PROCEDURE 语句相关时,关闭游标将终止此相关联的 SQL 语句。
数据库服务器释放它可能已经分配到活动行集的所有资源。例如,它用来保存有序集的临时表。数据库服务器还释放它在在通过游标选择的行上可能持有的任何锁定。然而,如果事务包含 CLOSE 语句,则在您执行 COMMIT WORK 或 ROLLBACK WORK 语句之前数据库服务器不释放锁定。
关闭 Select 游标或 Function 游标之后,您无法执行游标的 FETCH 语句,直到您重新打开它。
在 SPL 例程中,内置的 SQLCODE 函数可以显示 Select 游标或 Function 游标的 CLOSE 语句的结果。该函数返回的值相当于 sqlca 结构的 SQLCODE 字段。然而,如果您在调用 SPL 例程的上下文之外调用内置的 SQLCODE 函数,则 GBase 8s 发出错误。