Mit dieser Anweisung erhalten Sie Informationen über die Hostvariablen, die zum Speichern von Daten erforderlich sind, welche von der Datenbank abgerufen wurden, oder über Hostvariablen, die zum Übergeben von Daten an die Datenbank erforderlich sind.
DESCRIBE [ USER TYPES ] [ ALL | BIND VARIABLES FOR | INPUT | OUTPUT | SELECT LIST FOR ] [ LONG NAMES [ Langnamenspezifikation ] | WITH VARIABLE RESULT ] [ FOR ] { Anweisungsname | CURSOR Cursorname } INTO SQLDA-Name
Langnamenspezifikation : OWNER.TABLE.COLUMN | TABLE.COLUMN | COLUMN
Anweisungname : Bezeichner oder Hostvariable
Cursorname : deklarierter Cursor
SQLDA-Name : Bezeichner
USER TYPES-Klausel Eine DESCRIBE-Anweisung mit der USER TYPES-Klausel liefert Informationen über die Domänen einer Spalte. Normalerweise wird eine solche DESCRIBE-Anweisung angegeben, wenn eine vorhergehende DESCRIBE-Anweisung einen Indikator mit DT_HAS_USERTYPE_INFO zurückgibt.
Diese zurückgegebenen Informationen sind dieselben wie für eine DESCRIBE-Anweisung ohne die Schlüsselwörter USER TYPES, außer dass das Feld sqlname den Namen der Domäne enthält anstatt den Namen der Spalte.
Wenn die DESCRIBE-Anweisung die LONG NAMES-Klausel verwendet, dann enthält das Feld sqldata diese Informationen.
ALL-Klausel Mit DESCRIBE ALL können Sie INPUT und OUTPUT mit nur einer Anforderung an den Datenbankserver beschreiben. Das wirkt sich vorteilhaft auf die Performance aus. Zuerst werden die OUTPUT-Informationen in den SQLDA eingetragen, anschließend die INPUT-Informationen. Das Feld sqld enthält die Gesamtzahl der INPUT- und OUTPUT-Variablen. Das Bit DT_DESCRIBE_INPUT in der Indikatorvariablen wird für INPUT-Variablen gesetzt und für OUTPUT-Variablen gelöscht.
INPUT-Klausel Eine Bindevariable ist ein Wert, der von der Anwendung bereitgestellt wird, wenn die Datenbank die Anweisungen ausführt. Bindevariablen können als Parameter für die Anweisung angesehen werden. DESCRIBE INPUT trägt die Namen der Bindevariablen in die Namensfelder des SQLDA ein. DESCRIBE INPUT trägt außerdem die Anzahl der Bindevariablen in das Feld sqlda des SQLDA ein.
DESCRIBE verwendet die Indikatorvariablen im SQLDA, um zusätzliche Informationen bereitzustellen. DT_PROCEDURE_IN und DT_PROCEDURE_OUT sind Bits, die in der Indikatorvariablen gesetzt werden, wenn eine CALL-Anweisung beschrieben wird. DT_PROCEDURE_IN gibt einen IN- oder INOUT-Parameter an, und DT_PROCEDURE_OUT gibt einen INOUT- oder OUT-Parameter an. RESULT-Spalten für Prozeduren haben beide Bits gelöscht. Nach einem Beschreibungs-OUTPUT können diese Bits benutzt werden, um zwischen Anweisungen zu unterscheiden, die Ergebnismengen umfassen (müssen OPEN, FETCH, RESUME, CLOSE verwenden), und Anweisungen, die keine Ergebnismengen umfassen (müssen EXECUTE verwenden). DESCRIBE INPUT stellt DT_PROCEDURE_IN und DT_PROCEDURE_OUT entsprechend ein, wenn eine Bindevariable ein Argument für eine CALL-Anweisung ist. Bindevariablen innerhalb eines Ausdrucks, der ein Argument in einer CALL-Anweisung ist, setzen keine Bits.
OUTPUT-Klausel Die DESCRIBE OUTPUT-Anweisung trägt den Datentyp und die Länge für jedes Element der Auswahlliste in den SQLDA ein. In das Namensfeld wird ebenfalls ein Name für das Element der Auswahlliste eingetragen. Wenn ein Alias für ein Element der Auswahlliste angegeben wird, ist der Name dieser Alias. Andernfalls wird der Name aus dem Element der Auswahlliste hergeleitet: Wenn das Element ein einfacher Spaltenname ist, wird dieser verwendet; sonst wird eine Teilkette des Ausdrucks verwendet. DESCRIBE setzt außerdem die Anzahl der Auswahllistenelemente in das Feld sqld des SQLDA.
Wenn die beschriebene Anweisung ein UNION-Vorgang von zwei oder mehreren SELECT-Anweisungen ist, sind die für DESCRIBE OUTPUT zurückgegebenen Spaltennamen dieselben Spaltennamen, die auch für die erste SELECT-Anweisung zurückgegeben werden würden.
Wenn Sie eine CALL-Anweisung beschreiben, trägt die DESCRIBE OUTPUT-Anweisung den Datentyp, die Länge und den Namen im SQLDA für jeden INOUT- oder OUT-Parameter in der Prozedur ein. DESCRIBE OUTPUT setzt auch die Anzahl der INOUT- oder OUT-Parameter in das Feld sqld des SQLDA.
Wenn Sie eine CALL-Anweisung mit einer Ergebnismenge beschreiben, trägt die DESCRIBE OUTPUT-Anweisung den Datentyp, die Länge und den Namen im SQLDA für jede RESULT-Spalte in der Prozedurdefinition ein. DESCRIBE OUTPUT trägt außerdem die Anzahl der Ergebnisspalten in das Feld sqld des SQLDA ein.
LONG NAMES-Klausel Die LONG NAMES-Klausel dient zum Abrufen von Spaltennamen für eine Anweisung oder einen Cursor. Ohne diese Klausel ist die Länge von Spaltennamen auf 29 Zeichen begrenzt. Mit der Klausel werden beliebige Längen unterstützt.
Bei Verwendung von LONG NAMES werden die langen Namen im SQLDATA-Feld des SQLDA abgelegt, als ob Sie sie von einem Cursor abrufen würden. Keine.s der anderen Felder (SQLLEN, SQLTYPE usw.) wird ausgefüllt. Der SQLDA muss so eingestellt werden wie ein FETCH-SQLDA: Er muss einen Eintrag für jede Spalte enthalten, und der Eintrag muss ein Zeichenfolgentyp sein. Wenn eine Indikatorvariable vorhanden ist, wird die Kürzung in gewohnter Weise angezeigt.
Die Standardspezifikation für die langen Namen ist TABLE.COLUMN.
WITH VARIABLE RESULT-Klausel Diese Klausel wird verwendet, um Prozeduren zu beschreiben, die mehr als eine Ergebnismenge mit unterschiedlichen Anzahlen und Typen von Spalten haben können.
Wenn WITH VARIABLE RESULT verwendet wird, legt der Datenbankserver nach der DESCRIBE-Anweisung den Wert SQLCOUNT mit einer der folgenden Einstellungen fest:
0 Die Ergebnismenge kann sich ändern. Der Prozeduraufruf sollte nach jeder OPEN-Anweisung erneut beschrieben werden.
1 Die Ergebnismenge ist unveränderlich. Eine erneute Beschreibung ist nicht erforderlich.
Weitere Hinweise zur Verwendung der SQLDA-Struktur finden Sie unter Der SQL-Deskriptor-Bereich (SQLDA).
Die DESCRIBE-Anweisung richtet den benannten SQLDA so ein, dass er entweder OUTPUT (entsprechend der SELECT LIST) oder INPUT (BIND VARIABLES) für die benannte Anweisung beschreibt.
DESCRIBE BIND VARIABLES stellt bei INPUT die Datentypen im SQLDA nicht ein: Dieser Vorgang muss von der Anwendung durchgeführt werden. Mit dem Schlüsselwort ALL können Sie INPUT und OUTPUT in einem SQLDA beschreiben.
Wenn Sie einen Anweisungsnamen angeben, muss die Anweisung zuvor unter Verwendung der PREPARE-Anweisung mit demselben Anweisungsnamen vorbereitet worden sein und der SQLDA muss bereits zugeordnet worden sein (weitere Hinweise finden Sie unter ALLOCATE DESCRIPTOR-Anweisung [ESQL]).
Wenn Sie einen Cursornamen angeben, muss der Cursor zuvor deklariert und geöffnet worden sein. Die Standardaktion ist die Beschreibung von OUTPUT. Nur SELECT-Anweisungen und CALL-Anweisungen haben OUTPUT. DESCRIBE OUTPUT für jede andere Anweisung oder für einen nicht-dynamischen Cursor zeigt keine Ausgabe an, wenn das Feld sqld des SQLDA auf Null gesetzt wird.
In Embedded SQL werden NCHAR, NVARCHAR and LONG NVARCHAR standardmäßig als DT_FIXCHAR, DT_VARCHAR bzw. DT_LONGVARCHAR beschrieben. Wenn die Funktion db_change_nchar_charset aufgerufen wurde, werden diese Datentypen als DT_NFIXCHAR, DT_NVARCHAR bzw. DT_LONGNVARCHAR beschrieben. Weitere Hinweise finden Sie unter db_change_nchar_charset-Funktion.
Weitere Hinweise, wie NCHAR-Datentypen beschrieben werden, finden Sie in der Dokumentation für den Datentyp: NCHAR-Datentyp, NVARCHAR-Datentyp und LONG NVARCHAR-Datentyp.
Keine.
Keine.
SQL/2003 Kernfunktion. Bei einigen Klauseln handelt es sich um Erweiterungen des Herstellers.
Das folgende Beispiel beschreibt die Verwendung der DESCRIBE-Anweisung:
sqlda = alloc_sqlda( 3 ); EXEC SQL DESCRIBE OUTPUT FOR employee_statement INTO sqlda; if( sqlda->sqld > sqlda->sqln ) { actual_size = sqlda->sqld; free_sqlda( sqlda ); sqlda = alloc_sqlda( actual_size ); EXEC SQL DESCRIBE OUTPUT FOR employee_statement INTO sqlda; } |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |