如果查询的结果集中有多行,可使用游标从中检索行。游标是 SQL 查询结果集的句柄或标识符以及该结果集中的位置。
有关游标的介绍,请参见使用游标。
使用 DECLARE 语句声明特定 SELECT 语句的游标。
使用 OPEN 语句打开游标。
使用 FETCH 语句从游标中一次检索一行。
一直读取行,直到返回 SQLE_NOTFOUND 警告。在变量 SQLCODE(在 SQL 通信区结构中定义)中返回错误和警告代码。
使用 CLOSE 语句关闭游标。
UltraLite 应用程序中的游标始终是使用 WITH HOLD 选项打开的。它们从不自动关闭。必须使用 CLOSE 语句显式关闭每个游标。
以下是游标用法的简单示例:
void print_employees( void ) { int status; EXEC SQL BEGIN DECLARE SECTION; char name[50]; char sex; char birthdate[15]; a_sql_len ind_birthdate; EXEC SQL END DECLARE SECTION; /* 1. Declare the cursor. */ EXEC SQL DECLARE C1 CURSOR FOR SELECT emp_fname || ' ' || emp_lname, sex, birth_date FROM "DBA".employee ORDER BY emp_fname, emp_lname; /* 2. Open the cursor. */ EXEC SQL OPEN C1; /* 3. Fetch each row from the cursor. */ for( ;; ) { EXEC SQL FETCH C1 INTO :name, :sex, :birthdate:ind_birthdate; if( SQLCODE == SQLE_NOTFOUND ) { break; /* no more rows */ } else if( SQLCODE < 0 ) { break; /* the FETCH caused an error */ } if( ind_birthdate < 0 ) { strcpy( birthdate, "UNKNOWN" ); } printf( "Name: %s Sex: %c Birthdate: %s\n",name, sex, birthdate ); } /* 4. Close the cursor. */ EXEC SQL CLOSE C1; } |
有关 FETCH 语句的详细信息,请参见FETCH 语句 [ESQL] [SP]。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |