概述
使用 SET AUTOFREE 语句来指示数据库服务器启用或禁用内存管理特性,一旦游标关闭,该特性
可自动地释放为该游标分配的内存;
用法
此语句是对 SQL 的 ANSI/ISO 标准的扩展。您仅可随同 GBase 8s ESQL/C 使用此语句。
当为游标启用 Autofree 特性且该游标随后关闭时,您不需要显式地使用 FREE 语句来释放数据库
服务器为该游标分配的内存。如果您发出 SET AUTOFREE 但未指定选项,则缺省为
ENABLED。
启用 Autofree 特性的 SET AUTOFREE 语句必须出现在打开游标的 OPEN 语句之前。SET
AUTOFREE 语句不影响分配给已经打开的游标的内存。在启用游标的 Autofree 之后,您不可第二
次打开那个游标。
以 SET AUTOFREE 全局地影响游标
如果您未包括 FOR cursor_id 或 FOR cursor_id_var 子句,则 SET AUTOFREE 的范围是该程序中
所有后续声明的游标(或更准确地说,在不带有 FOR 子句的后续的 SET AUTOFREE 语句之前声
明的所有游标全局地重置 Autofree 特性)。此示例为程序中所有后续的游标启用 Autofree 特性:
EXEC SQL set autofree;
下一示例为所有后续的游标禁用 Autofree 特性:
EXEC SQL set autofree disabled;
使用 FOR 子句来指定特定的游标
如果您指定 FOR cursor _id 或 FOR cursor_id_var,则 SET AUTOFREE 仅影响您在 FOR 关键字
之后指定的游标。
此选项允许您覆盖对所有游标的全局的设置。例如,如果您在程序中为所有游标发出 SET
AUTOFREE ENABLED 语句,则可发出后续的 SET AUTOFREE DISABLED FOR 语句来为特定的
游标禁用 Autofree 特性。
在下列示例中,第一个语句为所有游标启用 Autofree 特性,而第二个语句为名为 x1 的游标禁用
Autofree 特性:
EXEC SQL set autofree enabled;
EXEC SQL set autofree disabled for x1;
在此,必须已声明了但尚未打开 x1 游标。
关联的和拆离的语句
隐式地关闭游标
启用了特性的游标存在潜在的问题。在不符合 ANSI 的数据库中,如果您不显式地关闭游标然后再
打开它,则隐式地关闭该游标。对游标的这种隐式的关闭触发 Autofree 特性。第二次打开该游标
时,数据库服务器会生成错误消息(cursor not found),因为该游标已被释放。
当自动地释放游标时,也释放它的关联的准备好的语句(或关联的语句)。
在 Autofree 特性的上下文中,术语关联的语句有特殊的含意。如果游标是您以准备好了的语句声
明的第一个游标,或如果它是您在该语句拆离之后以该语句声明的第一个游标,则以准备好了的语
句关联该游标。
在 Autofree 特性的上下文中,术语拆离的语句有特殊的含意。如果您不以准备好了的语句声明游
标,或如果释放了以其关联语句的游标,则拆离该准备好了的语句。
如果对游标启用 Autofree 特性,该有表有相关联的准备好了的语句,且那个游标关闭,则数据库
服务器释放分配给该准备好了的语句的内存以及分配给该游标的内存。假设您为下列游标启用
Autofree 特性:
/*Cursor associated with a prepared statement */
EXEC SQL prepare sel_stmt ‘select * from customer’;
EXEC SQL declare sel_curs2 cursor for sel_stmt;
当数据库服务器关闭 sel_curs2 游标时,它等同于自动地执行下列 FREE 语句:
FREE sel_curs2;
FREE sel_stmt;
由于自动地释放了 sel_stmt 语句的内存,因此您不可在其上声明新的游标,除非您再次准备该语
句。
最后
以上就是呆萌蜻蜓为你收集整理的GBase8s数据库SET AUTOFREE 语句的全部内容,希望文章能够帮你解决GBase8s数据库SET AUTOFREE 语句所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复