在嵌入式 SQL 中使用游标 |
您所在的位置:网站首页 › 嵌入式SQL语言中游标的使用步骤有 › 在嵌入式 SQL 中使用游标 |
在嵌入式 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 |