返回首页

gbase数据、南大通用产品文档:GBase8sSET AUTOFREE 语句

更新日期:2024年09月11日

使用 SET AUTOFREE 语句来指示数据库服务器启用或禁用内存管理特性,一旦
游标关闭,该特性可自动地释放为该游标分配的内存。
语法

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 958

元素
描述
限制
语法
cursor_id
Autofree 要为其
重设的游标的名

必须已在程序中声明了 标识符
cursor_id_var 持有 cursor_id
的值的主变量
必须存储在程序中已声
明了的 cursor_id
必须符合名称
的特定语言的
规则。
用法
此语句是对 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;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 959
使用 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 游标。
关联的和拆离的语句
当自动地释放游标时,也释放它的关联的准备好的语句(或关联的语句)。
在 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;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 960
由于自动地释放了 sel_stmt 语句的内存,因此您不可在其上声明新的游标,除非
您再次准备该语句。
隐式地关闭游标
启用了特性的游标存在潜在的问题。在不符合 ANSI 的数据库中,如果您不显式
地关闭游标然后再打开它,则隐式地关闭该游标。对游标的这种隐式的关闭触发
Autofree 特性。第二次打开该游标时,数据库服务器会生成错误消息(cursor
not found),因为该游标已被释放。

访问“ODBC Data Source Administrator”对话框来移除 DSN。
要移除 DSN,请:
1.
遵循来自 配置新的用户 DSN 或系统 DSN 的步骤 1 和 2。
2.
在“ODBC Data Source Administrator”对话框中点击移除。
“32 位 ODBC Administrator”对话框打开。
3.
点击是,来移除 DSN 并返回至“ODBC Data Source Administrator”对话框。

使用 RENAME SEQUENCE 语句来更改序列的名称。此语句为对 SQL 的
ANSI/ISO 标准的扩展。
语法

元素
描述
限制
语法
new_sequence 您在此为现有的序
列声明的新名称
必须为该数据库中序
列、表、视图和同义词
的名称之中唯一的
标识符
old_sequence 序列的当前名称
在当前的数据库中必须
存在
标识符
owner
序列的所有者
必须为该序列的所有者 所有者名称

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 799
用法
要重命名序列,您必须为该序列的所有者,对该序列有 ALTER 权限,或对该数
据库有 DBA 权限。
您不可使用同义词来指定该序列的名称。
在不符合 ANSI 的数据库中,new_sequence 的名称(或在符合 ANSI 的数据库
中,owner.new_sequence 的组合)必须在该数据库中的序列、表、视图和同义词
之中为唯一的。