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

SQL Anywhere 11.0.1 (Deutsch) » UltraLite - C- und C++-Programmierung » Anwendungsentwicklung » Anwendungen mit Embedded SQL entwickeln » Daten abrufen

 

Eine Zeile abrufen

Eine einzeilige Abfrage fragt höchstens eine Zeile von der Datenbank ab. Eine SELECT-Anweisung für eine einzeilige Abfrage kann eine INTO-Klausel nach der Auswahlliste und vor der FROM-Klausel enthalten. Die INTO-Klausel enthält eine Liste der Hostvariable, um den Wert der einzelnen Elemente der Auswahlliste zu empfangen. Die Anzahl der Hostvariable muss mit der Anzahl der Auswahllisten-Elemente übereinstimmen. Die Hostvariable können von Indikatorvariablen gefolgt sein, um NULL-Ergebnisse anzuzeigen.

Sobald die SELECT-Anweisung ausgeführt wird, ruft der Datenbankserver die Ergebnisse ab und schreibt sie in die Hostvariable.

  • Wenn die Abfrage mehrere Zeilen zurückgibt, gibt der Datenbankserver den Fehler SQLE_TOO_MANY_RECORDS zurück.

  • Wenn die Abfrage keine Zeilen zurückgibt, wird die Warnung SQLE_NOTFOUND zurückgegeben.

Weitere Hinweise zu den in der SQLCA-Struktur zurückgegebenen Fehlern und Warnungen finden Sie unter SQL-Kommunikationsbereich initialisieren.

Beispiel

Folgendes Codefragment gibt zum Beispiel 1 zurück, wenn eine Zeile der Tabelle employee erfolgreich abgerufen wird, 0, falls die Zeile nicht vorhanden ist, und -1, falls ein Fehler auftritt.

EXEC SQL BEGIN DECLARE SECTION;
   long int    emp_id;
   char        name[41];
   char        sex;
   char        birthdate[15];
   short int   ind_birthdate;
EXEC SQL END DECLARE SECTION;
int find_employee( long employee )
{
   emp_id = employee;
   EXEC SQL SELECT emp_fname || ' ' || emp_lname,
         sex, birth_date
      INTO :name, :sex, birthdate:ind_birthdate
      FROM "DBA".employee
      WHERE emp_id = :emp_id;
   if( SQLCODE == SQLE_NOTFOUND ) {
      return( 0 ); /* employee not found */
   } else if( SQLCODE < 0 ) {
      return( -1 ); /* error */
   } else {
      return( 1 ); /* found */
   }
}