Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

SELECT - Einzelnen Satz lesen

Mit der SELECT-Anweisung kann genau ein Satz einer Tabelle gelesen werden. Die gelesenen Spaltenwerte werden im Ausgabeziel abgespeichert.

Wenn die Ergebnistabelle mehr als einen Satz enthalten würde, liest die SELECT-Anweisung keinen Satz, es wird lediglich ein entsprechender SQLSTATE gesetzt. Zum Lesen von mehrsätzigen Ergebnistabellen muss ein Cursor verwendet werden.

Für die SELECT-Anweisung müssen Sie Eigentümer der Tabellen sein, aus denen die Werte abgefragt werden, oder das SELECT-Privileg für die angesprochenen Tabellen besitzen.



SELECT [ALL | DISTINCT] select_liste

   [INTO parameter-deklaration [, parameter-deklaration ]...

   FROM tabellenangabe ,...

   [WHERE suchbedingung ]

   [GROUP BY spalte ,...]

   [HAVING suchbedingung ]


parameter-deklaration ::=
{

  : benutzervariable [[INDICATOR] : indikatorvariable ] |
     routinenparameter |
     lokale_variable

}



Mit Ausnahme der INTO-Klausel sind die Klauseln der SELECT-Anweisung wie für den SELECT-Ausdruck definiert und im Abschnitt „SELECT-Ausdruck"ff beschrieben..


INTO

Nur für statische SELECT-Anweisung.

Bei einer statischen SELECT-Anweisung oder einer SELECT-Anweisung in einer Prozedur müssen Sie mit der INTO-Klausel das Ausgabeziel angeben, in die die Spaltenwerte des Ergebnissatzes ausgegeben werden.
Angabe, wohin die gelesenen Werte gespeichert werden.


:benutzervariable, routinenparameter, lokale_variable

Name einer Benutzervariablen (wenn die Anweisung nicht Bestandteil einer Routine ist) bzw. Name eines Prozedurparameters vom Typ INOUT oder OUT oder einer lokalen Variablen (wenn die Anweisung Bestandteil einer Routine ist). Der Spaltenwert des Ergebnissatzes wird dem angegebenen Ausgabeziel zugewiesen.

Der Datentyp muss mit dem Datentyp der zugehörigen Ergebnisspalte verträglich sein (siehe Abschnitt „Werte in Benutzervariable oder Deskriptorbereich lesen"). Ist eine Ergebnisspalte ein Aggregat mit mehreren Elementen, muss die zugehörige Benutzervariable ein Vektor mit derselben Anzahl von Elementen sein.

Die Anzahl der angegebenen Ausgabeziele muss mit der Anzahl der Spalten in der SELECT-Liste der SELECT-Anweisung übereinstimmen. Der Wert der i-ten Spalte in der SELECT-Liste wird dem i-ten Ausgabeziel in der INTO-Klausel zugewiesen. Ist der zuzuweisende Wert der NULL-Wert, wird das Ausgabeziel nicht gesetzt.

Gibt es keinen oder mehr als einen Ergebnissatz, wird kein Ausgabeziel gesetzt.

Gibt es keinen Ergebnissatz, wird ein SQLSTATE gesetzt, der mit WHENEVER NOT FOUND behandelt werden kann. Gibt es mehr als einen Ergebnissatz wird ein SQLSTATE gesetzt, der mit WHENEVER SQLERROR behandelt werden kann.


indikatorvariable

Name der Indikatorvariable, die zu der vorangehenden Benutzervariable gehört. Ist die Benutzervariable ein Vektor, muss auch die Indikatorvariable ein Vektor mit derselben Elementanzahl sein.

Die Indikatorvariable zeigt an, ob der NULL-Wert übertragen wurde oder Datenverlust aufgetreten ist:


0

-1

> 0

Die Benutzervariable enthält den gelesenen Wert. Die Zuweisung war fehlerfrei.

Der Wert, der zugewiesen werden sollte, ist der NULL-Wert.

Bei alphanumerischen Werten oder National-Werten:
Der Benutzervariable wurde eine verkürzte Zeichenkette zugewiesen.
Der Wert der Indikatorvariable gibt die Originallänge in Code Units an.


indikatorvariable nicht angegeben:
Ist der zuzuweisende Wert der NULL-Wert, wird ein entsprechender SQLSTATE gesetzt.

Dynamisch formulierte SELECT-Anweisung

Bei einer dynamisch formulierten SELECT-Anweisung dürfen Sie keine INTO-Klausel angeben. Die INTO-Klausel mit den Benutzervariablen bzw. dem SQL-Deskriptorbereich zur Aufnahme der Ergebniswerte geben Sie stattdessen in der EXECUTE-Anweisung an, mit der die dynamisch formulierte SELECT-Anweisung ausgeführt wird.


Beispiel

Das folgende Beispiel liest die Bezeichnung und den Mehrwertsteuersatz für die Leistung zu einer vorgegebenen Leistungsnummer und legt sie ab in den Benutzervariablen LTEXT und MWSATZ.

Die Leistungsnummer wird durch die Benutzer-Variable LNR definiert. Da die Leistungsnummerinnerhalb der Tabelle LEISTUNG eindeutig ist, ist sichergestellt, dass die Abfrage maximal einen Satz liefert.

SELECT ltext, mwsatz

INTO  :LTEXT INDICATOR :INDLTEXT :MWSATZ INDICATOR :INDMWSATZ

FROM leistung

WHERE lnr = :LNR