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) » SQL Anywhere Server - Programmierung » Einführung in die Programmierung mit SQL Anywhere » SQL in Anwendungen verwenden

 

Ergebnismengen beschreiben

Einige Anwendungen bauen SQL-Anweisungen auf, die in der Anwendung nicht ausgeführt werden können. Anweisungen hängen manchmal von einer Antwort des Benutzers ab, sodass die Anwendung erst dann erfährt, welche Daten abzurufen sind, wenn z.B. eine Berichtsanwendung dem Benutzer die Möglichkeit gibt, die anzuzeigenden Spalten auszuwählen.

In einem solchen Fall benötigt die Anwendung eine Methode, um Informationen über die Art der Ergebnismenge selbst sowie den Inhalt der Ergebnismenge zu erhalten. Die Informationen über die Art der Ergebnismenge werden als Deskriptor bezeichnet. Sie identifizieren die Datenstruktur einschließlich Anzahl und Typ der erwarteten Spalten. Wenn die Anwendung die Art der Ergebnismenge ermittelt hat, ist der Abruf des Inhalts ein einfacher Vorgang.

Diese Ergebnismengen-Metadaten (Informationen über Art und Inhalt der Daten) werden mithilfe von Deskriptoren bearbeitet. Das Beziehen und Verwalten von Ergebnismengen-Metadaten wird als Beschreiben bezeichnet.

Da Cursor im Allgemeinen Ergebnismengen produzieren, sind Deskriptoren und Cursor eng verknüpft, obwohl manche Schnittstellen die Verwendung von Deskriptoren vor dem Benutzer verbergen. Normalerweise gilt: Anweisungen, die Deskriptoren benötigen, sind entweder SELECT-Anweisungen oder gespeicherte Prozeduren, die Ergebnismengen zurückgeben.

Ein Deskriptor wird bei einem cursorbasierten Vorgang folgendermaßen eingesetzt:

  1. Weisen Sie den Deskriptor zu. Dies kann implizit erfolgen, die explizite Zuweisung ist aber in manchen Schnittstellen zulässig.

  2. Bereiten Sie die Anweisung vor.

  3. Anweisung beschreiben. Wenn es sich bei der Anweisung um eine gespeicherte Prozedur oder um einen Batch handelt und die Ergebnismenge nicht durch eine Ergebnisklausel in der Prozedurdefinition definiert wird, sollte die Beschreibung nach dem Öffnen des Cursors erscheinen.

  4. Deklarieren Sie einen Cursor für die Anweisung und öffnen Sie ihn (Embedded SQL), oder führen Sie die Anweisung aus.

  5. Beziehen Sie den Deskriptor und ändern Sie erforderlichenfalls den zugewiesenen Bereich. Dies erfolgt oft implizit.

  6. Rufen Sie die Anweisungsergebnisse ab und und verarbeiten Sie sie.

  7. Heben Sie die Zuweisung des Deskriptors auf.

  8. Schließen Sie den Cursor.

  9. Löschen Sie die Anweisung. Einige Schnittstellen führen dies automatisch durch.

Hinweise zur Implementierung
  • In Embedded SQL enthält eine SQLDA-(SQL Descriptor Area) Struktur die Deskriptor-Informationen. Weitere Hinweise finden Sie unter Der SQL-Deskriptor-Bereich (SQLDA).

  • In ODBC ermöglicht ein Deskriptor-Handle, durch SQLAllocHandle zugewiesen, den Zugriff auf die Felder eines Deskriptors. Sie können diese Felder mit SQLSetDescRec, SQLSetDescField, SQLGetDescRec und SQLGetDescField verarbeiten.

    Alternativ können Sie SQLDescribeCol and SQLColAttributes verwenden, um Spalteninformationen zu beziehen.

  • In Open Client können Sie ct_dynamic für die Vorbereitung einer Anweisung und ct_describe zur Beschreibungder Ergebnismenge der Anweisung verwenden. Sie können aber auch ct_command verwenden, um eine SQL-Anweisung ohne vorherige Vorbereitung zu senden, und dann mit ct_results die zurückgegebenen Zeilen nacheinander verarbeiten. Dies ist die normalerweise benutzte Vorgehensweise bei der Open Client-Anwendungsentwicklung.

  • In JDBC stellt die Klasse java.sql.ResultSetMetaData Informationen zu Ergebnismengen bereit.

  • Sie können auch Deskriptoren verwenden, um Daten an den Datenbankserver zu senden (z.B. mit der INSERT-Anweisung), aber dies ist eine andere Art von Deskriptor als für die Ergebnismenge.

    Weitere Hinweise zu Eingabe- und Ausgabeparametern für die DESCRIBE-Anweisung finden Sie unter DESCRIBE-Anweisung [ESQL].