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

SQL Anywhere 12.0.1 (Deutsch) » UltraLite - C- und C++-Programmierung » Anwendungsentwicklung » UltraLite C++-Anwendungsentwicklung mit Embedded SQL » Abrufen von Daten

 

Mehrere Zeilen mit einem Fetch-Vorgang abrufen

Verwenden Sie Cursor, um Zeilen aus einer Abfrage abzurufen, deren Ergebnismenge mehrere Zeilen umfasst. Ein Cursor ist ein Handle oder ein Bezeichner für die SQL-Abfrage und eine Position innerhalb der Ergebnismenge.

 Verwalten eines Cursors in Embedded SQL
  1. Deklarieren Sie einen Cursor für eine bestimmte SELECT-Anweisung mit der DECLARE-Anweisung.

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

  3. Rufen Sie mit der Anweisung FETCH einzelne Zeilen aus dem Cursor ab.

    • Wiederholen Sie das Abrufen von Zeilen, bis die Warnung SQLE_NOTFOUND zurückgegeben wird. Fehler- und Warnungscodes werden in der Variable SQLCODE zurückgegeben, die im SQL-Kommunikationsbereich definiert wird.

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

Cursor in UltraLite-Anwendungen werden immer mit der Option WITH HOLD geöffnet. Sie werden nie automatisch geschlossen. Sie müssen daher jeden Cursor explizit mit der Anweisung CLOSE schließen.

Das folgende einfache Beispiel zeigt den Gebrauch von Cursor:



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;
}
 Cursor positionieren
 Reihenfolge der Zeilen in einem Cursor
 Cursor neu positionieren
 Cursorpositionierung nach Aktualisierung
 Siehe auch