カーソルは、結果セットに複数のローがあるクエリからローを取り出すために使用されます。カーソルは、SQL クエリのためのハンドルつまり識別子であり、結果セット内の位置を示します。
DECLARE CURSOR 文を使って、特定の SELECT 文のためのカーソルを宣言します。
OPEN 文を使って、カーソルを開きます。
FETCH 文を使って、一度に 1 つのローをカーソルから取り出します。
「ローが見つかりません
」という警告が返されるまで、ローをフェッチします。
エラーと警告は、SQLCA 構造体で返されます。
CLOSE 文を使ってカーソルを閉じます。
デフォルトによって、カーソルはトランザクション終了時 (COMMIT または ROLLBACK 時) に自動的に閉じられます。WITH HOLD 句を指定して開いたカーソルは、明示的に閉じるまで以降のトランザクション中も開いたままになります。
次は、簡単なカーソル使用の例です。
void print_employees( void ) { EXEC SQL BEGIN DECLARE SECTION; char name[50]; char sex; char birthdate[15]; a_sql_len 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; } |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |