Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー プログラミング » Embedded SQL » データのフェッチ

 

Embedded SQL でのカーソル

カーソルは、結果セットに複数のローがあるクエリからローを取り出すために使用されます。カーソルは、SQL クエリのためのハンドルつまり識別子であり、結果セット内の位置を示します。

 ♦ Embedded SQL でのカーソルの管理
  1. DECLARE CURSOR 文を使って、特定の SELECT 文のためのカーソルを宣言します。

  2. OPEN 文を使って、カーソルを開きます。

  3. FETCH 文を使って、一度に 1 つのローをカーソルから取り出します。

  4. ローが見つかりません」という警告が返されるまで、ローをフェッチします。

    エラーと警告は、SQLCA 構造体で返されます。

  5. 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;
}
 カーソル位置
 カーソル位置に関する問題
 参照