DECLARE 语句

使用动态 SQL 的 DECLARE 语句声明游标,并将它与一个向 GBase 8s ESQL/C 或 SPL 例程返回一组行的 SQL 语句相关联。

语法

FOR UPDATE 或 FOR READ ONLY Select 选项
其它 Select 或 Function 选项
元素 描述 限制 语法
column 要使用游标更新的列 必须存在,但不需要列在 Projection 子句的 Select 列表中 标识符
cursor_id 此处为游标声明的名称 在游标的名称以及准备好的对象的名称中(在 SPL 中是变量)必须唯一 标识符
cursor_id_var 持有 cursor_id 的变量 必须有一个字符数据类型 特定于语言
statement_id 准备好的语句的名称 在 PREPARE 语句中声明 标识符
statement_id_var 持有 statement_id 的变量 必须有一个字符数据类型 特定于语言

用法

正如所指出的除外,下节描述了在 GBase 8s ESQL/C 例程中如何使用 DECLARE 语句。有关 SPL 例程中 DECLARE 语句的语法和语义更多的限制,请参阅在 SPL 例程中声明动态游标

游标是一个与一组行相关联的标识符。DECLARE 语句将游标与以下一个数据库对象相关联:
  • 使用一个 SQL 语句,例如 SELECT 、EXECUTE FUNCTION(或 EXECUTE PROCEDURE)或 INSERT。

    这些 SQL 语句中的每一个会创建一个不同类型的游标。有关更多信息,请参阅游标类型的概述

  • 使用准备好的语句的语句标识符(statement idstatement id variable

    您可以准备一个先前的 SQL 语句,并将该准备好的语句与游标相关联。有关更多信息,请参阅将游标与准备好的语句相关联

  • 使用 GBase 8s ESQL/C 程序中的集合变量

    集合变量的名称出现在 SELECT 的 FROM 子句或 INSERT 的 INTO 子句。有关更多信息,请参阅将游标与准备好的语句相关联

DECLARE 分配一个标识符给游标,指定它的用法并指示 GBase 8s ESQL/C 预处理器为它分配存储器。在程序执行期间,DECLARE 必须在任何其它引用该游标的语句之前执行。

在单个程序中可以共同存在的游标和准备好的对象的数目由可用的内存限制。要避免超出限制,可使用 FREE 语句释放一些准备好的语句或游标。

ESQL/C 程序可以由一个或多个源代码文件组成。在缺省情况下,因为引用游标的作用域是全局到程序,所以在一个源文件中声明的游标可以被另一个文件中语句引用。在多文件程序中,如果希望将游标名称的作用域限制到声明这些游标名称的文件,则必须使用 -local 命令行选项预先处理所有文件。

可以为同一个准备好的语句标识符声明多个游标。例如,下面的 GBase 8s ESQL/C 示例不会返回错误:
EXEC SQL prepare id1 from 'select * from customer';
          EXEC SQL declare x cursor for id1;
          EXEC SQL declare y scroll cursor for id1;
          EXEC SQL declare z cursor with hold for id1;
如果包含 -ansi 编辑标志(或者如果设置了 DBANSIWARN ),那么会针对使用动态游标名称或动态语句标识符的语句生成警告。一些错误检查会在运行时执行,如以下这些典型检查:
  • 将顺序游标作为滚动游标无效的使用
  • 使用未声明的游标
  • 无效的游标名称或语句名称(空)
建档游标或语句作为标识符指定时,会在编译的时候执行对同一名称的一个游标的多个声明的检查。下面示例使用主变量存储游标名称:
EXEC SQL declare x cursor for select * from customer;
          . . .
          stcopy("x", s);
          EXEC SQL declare :s cursor for select * from customer;

游标使用排列顺序,该顺序在游标被声明时是有效的,即使这不同于运行时会话的排列顺序。

1 GBase 8s 扩展
2 仅限于 ESQL/C
3 请参阅 与顺序游标相关联的 INSERT 语句的子集
4 请参阅 与游标相关联的 SELECT 语句的子集
5 请参阅 SELECT 语句
6 请参阅 EXECUTE PROCEDURE 语句
7 请参阅 EXECUTE FUNCTION 语句
8 请参阅 用集合派生的表选择
9 请参阅 使用集合派生表插入