南大通用GBase8s 常用SQL语句(113)

    1.  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 语句将游标与以下一个数据库对象相关联:

  1. 使用一个 SQL 语句,例如 SELECT 、EXECUTE FUNCTION(或 EXECUTE PROCEDURE)或 INSERT。

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

  1. 使用准备好的语句的语句标识符(statement id 或 statement id variable

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

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

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

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

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

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

可以为同一个准备好的语句标识符声明多个游标。例如,下面的 GBase 8s ESQL/C 示例不会返回错误:

  1. EXEC SQL prepare id1 from 'select * from customer';
  2. EXEC SQL declare x cursor for id1;
  3. EXEC SQL declare y scroll cursor for id1;
  4. EXEC SQL declare z cursor with hold for id1;

如果包含 -ansi 编辑标志(或者如果设置了 DBANSIWARN ),那么会针对使用动态游标名称或动态语句标识符的语句生成警告。一些错误检查会在运行时执行,如以下这些典型检查:

  1. 将顺序游标作为滚动游标无效的使用
  2. 使用未声明的游标
  3. 无效的游标名称或语句名称(空)

建档游标或语句作为标识符指定时,会在编译的时候执行对同一名称的一个游标的多个声明的检查。下面示例使用主变量存储游标名称:

EXEC SQL declare x cursor for select * from customer;

          . . .

          stcopy("x", s);

EXEC SQL declare :s cursor for select * from customer;

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

游标类型的概述

在典型情况下,对多行数据(或对 GBase 8s ESQL/C 集合变量)的数据操纵语言(DML)操作需要游标。您可以使用 DECLARE 语句声明一下类型的游标:

  1. Select 游标是与 SELECT 语句相关联的游标。
  2. 函数游标是与 EXECUTE FUNCTION (或 EXECUTE PROCEDURE)语句相关联的游标。
  3. Insert 游标是与 INSERT 语句相关联的游标。

后面的章节描述了这些游标的类型中的每一中类型。游标也可以有顺序滚动控制特征(但是 Insert 游标不可是一个滚动游标)。这些特征确定了游标的结构;请参阅 游标特性。此外,Select 游标或函数游标可以指定只读更新方式。有关更多信息,请参阅Select 游标或 Function 游标。

提示: 函数游标的行为与作为更新游标启用的 Select 游标相同。

除了将游标直接与 SQL 语句的内容相关联,DECLARE 语句的 FOR 关键字可以紧跟在准备好的 SQL 语句的标识符后面,并将此游标与动态准备好的 INSERT 、SELECT 、EXECUTE FUNCTION(或 EXECUTE PROCEDURE)语句的结果集相关联。该功能可以使您在不同时刻将不同的语句与同一个游标使用。在这种情况下,游标的类型取决于打开游标时 statement_id 或 statement_id 变量指定的准备好的语句。(有关更多信息,请参阅将游标与准备好的语句相关联。)

Select 游标或 Function 游标

当 SQL 语句将多组值返回到一个 GBase 8s ESQL/C 程序中时,必须声明一个游标以保存多组或行数据并且以一次访问一行的方式访问这些行。您必须将以下 SQL 语句与游标相关联:

  1. 如果将 SELECT 语句与游标相关联,则该游标称为 Select 游标

Select 游标是一个数据结构,代表 SELECT 语句检索到行的活动集合内特定位置。

  1. 如果将 EXECUTE FUNCTION(或者 EXECUTE PROCEDURE)语句与游标相关联,则该游标称为函数游标

函数游标代表用户定义的函数返回的列或值。函数游标的行为与作为更新游标启用的 Select 游标相同。

在 GBase 8s 中,对于后向兼容性,如果一个 SPL 函数是使用 CREATE PROCEDURE 语句创建的,那么可以使用 EXECUTE PROCEDURE 语句创建一个函数游标。对于外部函数,必须使用 EXECUTE PROCEDURE 语句。

当您将 SELECT 或 EXECUTE FUNCTION (或 EXECUTE PROCEDURE)语句与一个游标相关联时,该语句可以包括 INTO 子句。但是,如果准备 SELECT 或 EXECUTE FUNCTION(或 EXECUTE PROCEDURE)语句,您必须省略 PREPARE 语句中的 INTO 子句并使用 FETCH 语句的 INTO 子句从集合游标检索值。

Select 或函数游标可以扫描返回的数据行,并逐行数据移动到接收变量的集合中,如下面的步骤所述:

  1. DECLARE

使用 DECLARE 定义一个游标并将它与一个语句相关联。

  1. OPEN

使用 OPEN 打开该游标。数据库服务器处理查询,直到它定位或构造活动集的第一行。

  1. FETCH

使用 FETCH 从游标检索连续行的数据。

  1. CLOSE

使用 CLOSE 在不再需要游标的活动集时关闭游标。

  1. FREE

使用 FREE 释放为游标分配的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值