在嵌入式 SQL 中使用游标

您所在的位置:网站首页 嵌入式SQL语言中游标的使用步骤有 在嵌入式 SQL 中使用游标

在嵌入式 SQL 中使用游标

#在嵌入式 SQL 中使用游标| 来源: 网络整理| 查看: 265

在嵌入式 SQL 中使用游标

游标用于从其结果集中具有多个行的查询中检索行。游标是 SQL 查询的句柄或标识符,也是结果集中的一个位置。

有关游标的介绍,请参见使用游标。

♦  在嵌入式 SQL 中管理游标

使用 DECLARE 语句声明特定 SELECT 语句的游标。

使用 OPEN 语句打开游标。

使用 FETCH 语句一次一行地从游标中检索结果。

读取行,直到返回 [未找到行] 警告。

在 SQLCA 结构中返回错误和警告。请参见SQL 通信区域 (SQLCA)。

使用 CLOSE 语句关闭游标。

缺省情况下,在事务(COMMIT 或 ROLLBACK 上)的结尾会自动关闭游标。用 WITH HOLD 子句打开的游标对于后续事务保持打开状态,直到它们被显式关闭。

以下是游标用法的简单示例:

void print_employees( void ) { EXEC SQL BEGIN DECLARE SECTION; char name[50]; char Sex; char birthdate[15]; short int ind_birthdate; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE C1 CURSOR FOR SELECT GivenName || ' ' || Surname, Sex, BirthDate FROM Employees; EXEC SQL OPEN C1; for( ;; ) { EXEC SQL FETCH C1 INTO :name, :Sex, :birthdate:ind_birthdate; if( SQLCODE == SQLE_NOTFOUND ) { break; } else if( SQLCODE < 0 ) { break; } if( ind_birthdate < 0 ) { strcpy( birthdate, "UNKNOWN" ); } printf( "Name: %s Sex: %c Birthdate: %s.n",name, Sex, birthdate ); } EXEC SQL CLOSE C1; }

有关使用游标的完整示例,请参见静态游标示例和动态游标示例。

游标定位

游标定位在以下三个位置之一:

在一行上

在第一行之前

在最后一行之后

当游标打开之后,它位于第一行之前。可使用 FETCH 语句来移动游标位置。可以将游标定位到相对查询结果开头或结尾的一个绝对位置。也可以相对当前游标位置移动它。请参见FETCH 语句 [ESQL] [SP]。

UPDATE 和 DELETE 语句有特殊的定位 版本,可用于更新或删除游标当前位置处的行。如果游标位于第一行之前或最后一行之后,则会返回错误,指示游标中没有相应的行。

可以使用 PUT 语句向游标中插入行。请参见PUT 语句 [ESQL]。

游标定位问题

插入 DYNAMIC SCROLL 游标并对其进行某些更新会导致与游标定位有关的问题。除非 SELECT 语句中有 ORDER BY 子句,否则数据库服务器不将插入的行放在游标内可预知的位置。在有些情况下,插入的行要等到关闭并再次打开游标后才会出现。

对于 SQL Anywhere,如果必须创建临时表才能打开游标,则会出现这种情况。

有关说明,请参见在查询处理中使用工作表(使用 All-rows 优化目标)。

UPDATE 语句可导致行在游标中移动。如果游标具有一个使用现有索引(未创建临时表)的 ORDER BY 子句,则会出现这种情况。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3