FREE 语句

使用 FREE 语句来释放那些分配给准备好的语句或分配给游标的资源。

语法

元素 描述 限制 语法
cursor_id 游标的名称 必须已经声明 标识符
cursor_id_var 持有 cursor_id 值的主变量 必须为字符数据类型 特定于语言
statement_id 准备好的 SQL 语句的标识符 必须在先前的 PREPARE 语句中定义 PREPARE 语句
statement_id_var 存储准备好的对象名称的主变量 必须声明为字符数据类型。 PREPARE 语句

用法

随同 GBase 8s ESQL/C 或随同 SPL使用此语句,这是对 SQL 的 ANSI/ISO 标准的扩展。

FREE 释放为准备好的语句或为游标分配的(ESQL/C 的)数据库服务器和应用开发工具。

如果您为准备好的语句声明游标,则 FREE statement_id(或 statement_id_var)仅释放应用开发工具中的资源;游标仍可使用。仅当释放游标时,才释放数据库服务器中的资源。

如果您准备了语句(但没有为它声明游标),则 FREE statement_id(或 FREE statement_id_var)释放在应用开发工具和数据库服务器中的资源。

在您释放语句之后,不可执行它或为它声明游标,直到您再次准备它。

下列 GBase 8s ESQL/C 示例展示那些用于释放隐式准备好的语句的语句序列:
EXEC SQL prepare sel_stmt from 'select * from orders';
...
EXEC SQL free sel_stmt; 
下列 GBase 8s ESQL/C 示例展示那些用于释放显式准备好的语句的资源的语句序列。此示例中的第一个 FREE 语句释放游标。此示例中的第二个 FREE 语句释放准备好的语句。
sprintf(demoselect, "%s %s",
   "select * from customer ",
   "where customer_num between 100 and 200");
EXEC SQL prepare sel_stmt from :demoselect;
EXEC SQL declare sel_curs cursor for sel_stmt;
EXEC SQL open sel_curs;
...
EXEC SQL close sel_curs;
EXEC SQL free sel_curs;
EXEC SQL free sel_stmt;

如果您为准备好的语句声明游标,则释放游标仅释放数据库服务器中的资源。要为该语句释放应用开发工具中的资源,请使用 FREE statement_id(或 FREE statement_id_var)。如果未为准备好的语句声明游标,则释放它会释放应用开发工具和数据库服务器中的资源。要查看释放游标的 FREE 语句的 ESQL/C 示例,请参阅前面的示例。

释放游标之后,不可打开它直到再次声明为止。游标应在其被释放之前明确地关闭它。

在 SPL 例程执行完毕时,数据库服务器自动地释放例程中通过 PREPARE 或 DECLARE 语句已经分配给游标或准备好的语句的任何资源,如果这些资源尚未由 FREE 语句释放的话。

SPL 例程中的 FREE 语句不可引用 SPL 的 FOREACH 语句可声明的直接游标的 cursor_id

1 仅限于 ESQL/C