Selektierte Spalte (select_column)
Selektierte Spalten (
select_column
) müssen in einer
QUERY-Spezifikation (query_spec) bzw. in einer
QUERY-Spezifikation (named_query_spec) angegeben werden, um eine Ergebnistabelle zu spezifizieren.Die Folge von selektierten Spalten definiert die Spalten der Ergebnistabelle. Die Spalten der Ergebnistabelle ergeben sich aus den Spalten der Zwischenergebnistabelle, gegebenenfalls ergänzt durch ROWNO-Spalten (
rowno_column
) bzw. STAMP-Spalten (
stamp_column
). Die Spalten der Zwischenergebnistabelle werden durch die
FROM-Klausel des
Tabellenausdrucks bestimmt. Die Reihenfolge der Spaltennamen der Zwischenergebnistabelle wird durch die Reihenfolge der Tabellennamen in der FROM-Klausel bestimmt.
Syntax
<select_column> ::= <table_columns> | <derived_column> | <rowno_column> | <stamp_column>
<table_columns> ::= * | <table_name>.* | <reference_name>.*
<derived_column> ::= <expression> [ [AS] <result_column_name>] | <result_column_name> = <expression>
<rowno_column> ::= ROWNO [<result_column_name>] | <result_column_name> = ROWNO
<stamp_column> ::= STAMP [<result_column_name>] | <result_column_name> = STAMP<result_column_name> ::= <identifier>
table_name,
reference_name,
expression,
identifierErläuterung
Jeder als selektierte Spalte (
select_column
) angegebene Spaltenname muß eindeutig eine Spalte einer der
QUERY-Spezifikation (query_spec) zugrundeliegenden Tabellen bezeichnen. Gegebenenfalls ist der Spaltenname durch den Tabellennamen zu qualifizieren.Die Angabe einer Spalte des Datentyps LONG in einer selektierten Spalte ist nur in der obersten Folge von selektierten Spalten in einer
QUERY-Anweisung,
SINGLE SELECT-Anweisung,
SELECT DIRECT-Anweisung oder einer
SELECT ORDERED-Anweisung zulässig, wenn dort nicht die
DISTINCT-Spezifikation verwendet wurde.Die Angabe einer Spalte des Datentyps
LONG in einer selektierten Spalte ist nur in der obersten Folge von selektierten Spalten in einer
CREATE VIEW-Anweisung, der genau eine Basistabelle zugrundeliegt, zulässig.Wenn eine selektierte Spalte eine
Set-Funktion (set_function_spec) enthält, darf die Folge der selektierten Spalten, zu der sie gehört, keine Tabellenspalten (
table_columns
) enthalten, und jeder in einem
Ausdruck (expression) auftretende Spaltenname muß eine Gruppierspalte bezeichnen, oder der Ausdruck muß sich aus Gruppierspalten zusammensetzen.- Die Angabe von Tabellenspalten (
table_columns
) in einer selektierten Spalte ist ein Abkürzung für die Angabe der Spalten der Ergebnistabelle.
- Wird nur eine selektierte Spalte der Art * angegeben, so ist das eine Abkürzung für die Angabe aller Spalten der Zwischenergebnistabelle in unveränderter Reihenfolge.
Spalten, für die der Benutzer nicht das SELECT-Privileg hat, und die implizit angelegte Spalte SYSKEY werden nicht übernommen.
- Die Angabe von
<table_name>.*
oder
<reference_name>.*
ist eine Abkürzung für die Angabe aller Spalten der zugrundeliegenden Tabelle. Der erste Spaltenname der Ergebnistabelle wird vom ersten Spaltennamen der zugrundeliegenden Tabelle übernommen, der zweite Spaltenname der Ergebnistabelle entspricht dem zweiten Spaltennamen der zugrundeliegenden Tabelle, usw. Die Reihenfolge der Spaltennamen der zugrundeliegenden Tabelle entspricht der bei der Definition der zugrundeliegenden Tabelle festgelegten Reihenfolge.
Spalten, für die der Benutzer nicht das SELECT-Privileg hat, und die implizit angelegte Spalte SYSKEY werden nicht übernommen.
derived_column
in einer selektierten Spalte definiert eine Spalte der Ergebnistabelle. Wenn eine Spalte der Ergebnistabelle die Form
<expression> [AS] <result_column_name>
oder die Form
<result_column_name> = <expression>
hat, erhält diese Ergebnisspalte den Namen
result_column_name
.
Wenn kein
<result_column_name>
angegeben ist und der
Ausdruck (expression) eine Spaltenspezifikation ist, die eine Spalte der Zwischenergebnistabelle bezeichnet, erhält die Spalte der Ergebnistabelle den Spaltennamen der Zwischenergebnistabelle.
Wenn kein
<result_column_name>
angegeben ist und der Ausdruck keine Spaltenspezifiaktion ist, erhält die Spalte den Namen
EXPRESSION_
, wobei "_" eine maximal dreistellige Zahl bedeutet, beginnend mit
EXPRESSION1
,
EXPRESSION2
, usw.
Eine ROWNO-Spalte (
rowno_column
) darf nur in einer selektierten Spalte spezifiziert werden, die zu einer QUERY-Anweisung gehört.
Bei Angabe einer ROWNO-Spalte wird eine Spalte vom Datentyp
FIXED(10) mit dem Namen ROWNO erzeugt. Sie enthält die Werte 1, 2, 3,..., welche eine Numerierung der Zeilen der Ergebnistabelle darstellen.
Wenn die ROWNO-Spalte in der Form
ROWNO <result_column_name>
oder in der Form
<result_column_name> = ROWNO
angegeben wurde, erhält diese Ergebnisspalte den Namen
result_column_name
.
Über eine ROWNO-Spalte darf nicht mittels ORDER BY sortiert werden.
Eine STAMP-Spalte (
stamp_column
) darf nur in einer selektierten Spalte spezifiziert werden, die zu einem
QUERY-Ausdruck (query_expression) einer
INSERT-Anweisung gehört.
Das Datenbanksystem ist in der Lage, eindeutige Werte zu generieren. Dabei handelt es sich um eine fortlaufende Nummer, die bei X'000000000001' beginnt. Die Werte werden aufsteigend vergeben, wobei nicht sichergestellt werden kann, daß eine Folge von Werten lückenlos ist.
Die Angabe einer STAMP-Spalte liefert pro Zeile der Zwischenergebnistabelle den nächsten vom Datenbanksystem generierten Wert vom Datentyp
CHAR(8) BYTE.
Jede Spalte einer Ergebnistabelle hat den gleichen Datentyp, die gleiche Länge, die gleiche Genauigkeit und die gleiche Anzahl von Nachkommastellen wie die
derived_column
oder die zugrundeliegende Spalte der Tabellenspalten (
table_columns
).Für die Datentypen DATE und TIMESTAMP trifft dies nicht zu. Um die Darstellung jedes Datums- und Zeitformats zu ermöglichen, wird die Länge der Spalte der Ergebnistabelle auf die maximal notwendige Länge zur Darstellung eines
Datumswertes (Länge 10) bzw. eines
Zeitstempelwertes (Länge 26) gesetzt.