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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - Programmierung » Embedded SQL » Abruf von Daten mit Embedded SQL

 

Cursor in Embedded SQL

Ein Cursor wird benutzt, um Zeilen aus einer Abfrage abzurufen, die mehrere Zeilen in ihrer Ergebnismenge hat. Ein Cursor ist ein Handle oder ein Name (identifier) für die SQL-Abfrage und eine Position innerhalb der Ergebnismenge.

Die Cursor-Verwaltung in Embedded SQL erfordert folgende Schritte:

  1. Deklarieren Sie einen Cursor für eine bestimmte SELECT-Anweisung mit der DECLARE CURSOR-Anweisung.

  2. Öffnen Sie den Cursor mit der Anweisung OPEN.

  3. Rufen Sie die Ergebnisse Zeile für Zeile mit der FETCH-Anweisung aus dem Cursor ab.

  4. Wiederholen Sie das Abrufen der Zeilen, bis die Warnung Zeile nicht gefunden zurückgegeben wird.

    Fehler und Warnungen werden in der SQLCA-Struktur zurückgegeben.

  5. Schließen Sie den Cursor mit der CLOSE-Anweisung.

Als Voreinstellung werden Cursor automatisch am Ende der Transaktion geschlossen (bei COMMIT oder ROLLBACK). Cursor, die mit einer WITH HOLD-Klausel geöffnet werden, bleiben für folgende Transaktionen geöffnet, bis sie explizit geschlossen werden.

Das folgende einfache Beispiel zeigt den Gebrauch von Cursor:



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;
}
 Cursor positionieren
 Probleme mit der Cursorpositionierung
 Siehe auch