Anmerkung:
Die hier zur Verfügung gestellten Dokumentations-Updates umfassen
nur die Änderungen, die Natural for DB2 Version 8.4 und höher betreffen.
Die meisten Änderungen wurden in den SQL-Statements von Natural for DB2 Version 8.4.1 zur Unterstützung von IBM Db2 Version 12 implementiert.
Natural-Statements und Systemvariablen benutzen unter Natural for Db2 Version 8.4
Dynamische und statische SQL-Unterstützung unter Natural for DB2 Version 8.4
Informationen zu den Änderungen bei der Installation finden Sie unter Installing Natural for Db2 Version 8.4.3 in der Natural Installation-Dokumentation.
Anmerkung:
Dies ist ein Auszug aus dem Kapitel
Natural-Statements und Systemvariablen
benutzen und beschreibt nur die Änderungen, die speziell
für Natural for Db2 Version 8.4 gelten.
Wenn ein Natural-Programm ein DML UPDATE
-Statement
enthält, wird dieses Statement in ein SQL UPDATE
-Statement
übersetzt und eine FOR UPDATE OF
-Klausel wird
dem SELECT
-Statement hinzugefügt.
Beachten Sie, dass ein Primärschlüsselfeld nicht Teil einer
FOR UPDATE OF
-Liste ist, es sei denn, die Compileroption
DB2PKYU
ist auf ON
gesetzt. Wenn DB2PKYU
auf OFF
gesetzt ist (Voreinstellung), kann ein Primärschlüsselfeld nur durch eine
Nicht-Cursor-UPDATE
-Operation aktualisiert werden (siehe auch
Natural-SQL UPDATE
- Statement im
Abschnitt Verwendung von Natural-SQL-Statements).
Eine Skalarfunktion ist eine eingebaute Funktion, die bei der Konstruktion von skalaren Berechnungsausdrücken verwendet werden kann. Skalarfunktionen sind spezifisch für Db2 und gehören zum Natural SQL Extended Set.
Die Skalarfunktionen, die Natural for Db2 unterstützt, sind im Folgenden in alphabetischer Reihenfolge aufgeführt:
A - H | I - R | S - Z |
---|---|---|
|
|
|
Auf jede Skalarfunktion folgen ein oder mehrere skalare Ausdrücke in Klammern. Die Anzahl der Skalarausdrücke hängt von der Skalarfunktion ab. Mehrere skalare Ausdrücke müssen durch Kommata voneinander getrennt werden.
Beispiel:
SELECT NAME INTO NAME FROM SQL-PERSONNEL WHERE SUBSTR ( NAME, 1, 3 ) = 'Fri' ...
Die folgenden Spaltenfunktionen entsprechen nicht dem Standard-SQL. Sie sind spezifisch für DB2 und gehören zum Natural SQL Extended Set.
COUNT_BIG
CORRELATION
COVARIANCE
COVARIANCE_SAMP
MEDIAN
PERCENTILE_CONT
PERCENTILE_DISC
STDDEV
STDDEV_POP
STDDEV_SAMP
VAR
VAR_POP
VAR_SAMP
VARIANCE
VARIANCE_SAMP
XMLAGG
Mit Ausnahme von USER
entsprechen die folgenden
speziellen Register nicht dem Standard-SQL. Sie sind spezifisch für DB2 und
gehören zum Natural SQL Extended Set:
CURRENT APPLICATION COMPATIBILITY
CURRENT APPLICATION ENCODING SCHEME
CURRENT CLIENT_ACCNTG
CURRENT CLIENT_APPLNAME
CURRENT CLIENT_CORR_TOKEN
CURRENT CLIENT_USERID
CURRENT CLIENT_WRKSTNNAME
CURRENT DATE
CURRENT_DATE
CURRENT DEBUG MODE
CURRENT DECFLOAT ROUNDING MODE
CURRENT DEGREE
CURRENT FUNCTION PATH
CURRENT GET_ACCEL_ARCHIVE
CURRENT_LC_CTYPE
CURRENT LC_CTYPE
CURRENT LOCALE LC_CTYPE
CURRENT MAINTAINED TABLE TYPES FOR
OPTIMIZATION
CURRENT_MEMBER
CURRENT OPTIMIZATION HINT
CURRENT PACKAGE PATH
CURRENT PACKAGESET
CURRENT_PATH
CURRENT PRECISION
CURRENT QUERY ACCELERATION
CURRENT REFRESH AGE
CURRENT ROUTINE VERSION
CURRENT RULES
CURRENT SCHEMA
CURRENT SERVER
CURRENT SQLID
CURRENT TEMPORAL BUSINESS_TIME
CURRENT TEMPORAL_SYSTEM_TIME
CURRENT TIME
CURRENT_TIME
CURRENT TIMESTAMP
CURRENT TIMEZONE
CURRENT_TIMEZONE USER
SESSION TIME ZONE
SESSION_USER
USER
Ein Referenz auf ein spezielles Register gibt einen skalaren Wert zurück.
Mit dem Kommando SET CURRENT SQLID
kann
der Erzeugername (Creator Name) einer Tabelle durch die aktuelle SQLID ersetzt
werden. Dies ermöglicht den Zugriff auf identische Tabellen mit demselben
Tabellennamen, aber mit unterschiedlichen Erzeugernamen.
Anmerkung:
Dies ist ein Auszug aus dem Kapitel
SELECT-Ausdrücke
(Statements-Dokumentation) und beschreibt nur die
spezifischen Änderungen für Natural for Db2 Version 8.4.
, | ||||||||
* |
A selection
specifies the
columns of the result set tables to be selected.
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung |
---|---|
ALL |
DISTINCT |
Eliminierung doppelt vorkommender
Zeilen:
Doppelt vorkommende Zeilen werden nicht automatisch aus
dem Ergebnis eines Die Alternative zu |
scalar-expression |
Skalar-Ausdruck:
Anstelle eines einfachen Spaltennamen können Sie auch
allgemeine Beispiel: SELECT NAME, 65 - AGE FROM SQL-PERSONNEL ... |
AS |
Das optionale Schlüsselwort
AS steht zu Beginn eines
correlation-name
für eine Spalte.
|
correlation-name |
Korrelationsname:
Es besteht die Möglichkeit, einem
Der
|
unpack-row |
Siehe unpack-row weiter unten. |
* |
Stern-Notation (*) :
Alle Spalten der Ergebnistabelle werden ausgewählt. Beispiel: SELECT * FROM SQL-PERSONNEL, SQL-AUTOMOBILES ... |
UNPACK
(scalar-expression)
.* AS ({field-name
data-type} ,
)
|
Mit unpack-row
geben Sie
eine Spalte nicht entpackter Binärwerte an, die zurückgegeben werden, wenn die
SQL UNPACK
-Funktion aufgerufen wird. Die Anzahl der Feldnamen
(field-names) und Datentypen
(data-types) muss mit der Anzahl der von der
SQL UNPACK
-Funktion zurückgegeben Felder übereinstimmen.
GROUP
BY |
, |
Die GROUP BY
-Klausel gibt eine Gruppierung der
Ergebnistabelle an. Es ergibt sich eine Menge von Gruppen mit Zeilen. Innerhalb
einer Gruppe mit mehr als einer Zeile sind alle Werte, die die Gruppe
definieren, gleich.
Ein grouping-expression
ist ein scalar-expression
,
der die Gruppierung eines result-set
definiert.
GROUPING SETS |
( | , | ) | ||||||||
( | , | ) |
Ein grouping-set
wird
verwendet, um mehrere Gruppierungsklauseln in einem einzigen Statement
anzugeben. Ein grouping-set
kombiniert
zwei oder mehr Zeilengruppen zu einem einzigen Resultset (Ergebnismenge). Es
ist das gleiche wie eine UNION
-Verkettung mehrerer
select-expressions
mit einer
GROUP BY
-Klausel, wobei jeder Ausdruck einem
grouping-set
entspricht. Ein
grouping-set
ist ein einzelnes Element
oder eine Liste mit Elementen, die durch Klammern voneinander abgegrenzt sind.
Ein Element ist entweder ein
grouping–expression
oder eine
super-group
. Ein
grouping-set
hat den Vorteil, dass die
Gruppen in einem einzigen Durchgang über die Basistabelle berechnet werden.
(grouping-expression-list)
|
|||
(
) |
Eine super-group
ist
eine komplexerer grouping-set
.
Eine
grouping-expression-list
definiert die
Anzahl der Elemente, die in einer ROLLUP
- oder
CUBE
-Operation verwendet werden. Elemente mit mehreren
grouping-expressions
werden durch
Klammern voneinander abgegerenzt.
grouping-expression | , | ||
(grouping-expression, ) |
Gesamtresultat "grand
total" ( )
:
ROLLUP
und CUBE
liefern eine Zeile,
die die Gesamtaggregation (Gesamtresultat) ist. Dies kann durch leere Klammern
( )
in der GROUPING SETS
-Klausel angegeben
werden.
- ROLLUP
Eine
ROLLUP
-Gruppierung ist wie eine Reihe vongrouping-sets
. Zusätzlich zu den regulären gruppierten Zeilen erzeugt eineROLLUP
-Gruppierung einen Resultset (Ergebnismenge), die Zwischensummenzeilen enthält. Zwischensummenzeilen sind "super-aggregierte" Zeilen, die zusätzliche Gesamtsummen enthalten. Die aggregierten Werte werden mit denselben Spaltenfunktionen abgerufen, die zum Abrufen der regulären gruppierten Zeilen verwendet werden.Generell geben Sie eine
ROLLUP
-Gruppierung mitn
Elementen wie folgt an:GROUP BY ROLLUP (c1, c2, ..., cn-1, cn)Was folgender Angabe entspricht:
GROUP BY GROUPING SETS ((c1, c2, ..., cn-1, cn), (c1, c2, ..., cn-1), ... (c1, c2), (c1), ( ))- CUBE
Eine
CUBE
-Gruppierung ist wie eine Reihe vongrouping-sets
. Zusätzlich zu denROLLUP
-Aggregationszeilen erzeugtCUBE
einen Resultset (Ergebnismenge), die Kreuztabellierungszeilen enthält. Kreuztabellierungszeilen sind zusätzliche "super-aggregierte" Zeilen. Diegrouping-expression-list
einesCUBE
berechnet zusammen mit dem Gesamtresultat "grand total" alle Permutationen. Als Ergebnis werden dien
Elemente einesCUBE
in 2**ngrouping-sets
umgesetzt. Zum Beispiel:GROUP BY CUBE (a, b, c)Was folgender Angabe entspricht:
GROUP BY GROUPING SETS ((a, b, c), (a, b), (a, c), (b, c), (a), (b), (c), ())
Anmerkung:
Dies ist ein Auszug aus dem Kapitel
Dynamische und statische
SQL-Unterstützung
(Statements-Dokumentation) und beschreibt nur die
spezifischen Änderungen für Natural for Db2 Version
8.4.
Wenn #SWITCH-BY-TRANSACTION-ID
auf FALSE
gesetzt ist, wird der gewünschte Plan-Name in eine temporäre
Speicherwarteschlange für eine CICS/Db2-Exit-Routine geschrieben, die als
PLANExit-Attribut eines DB2ENTRY
oder der
DB2CONN
-Definition angegeben ist. Das
NATPLAN
-Programm muss vor dem ersten Db2-Zugriff aufgerufen
werden. Natural for Db2 bietet NDBUEXT
als
CICS-Db2-Planauswahl-Exit-Programm. Weitere Informationen zu
CICS/Db2-Exit-Routinen finden Sie in der entsprechenden IBM-Literatur.
Der Name der temporären Speicherwarteschlange lautet
PLANxxxx
, wobei
ssss
die Kennung des entfernten oder
lokalen CICS-Systems und tttt
die
CICS-Terminalkennung ist.
In einer CICSplex-Umgebung muss die CICS-Warteschlange
PLANxxxx
, die den Namen des Plans
enthält, mit TYPE=SHARED
oder TYPE=REMOTE
in einem
CICS-TST definiert werden.
Für jede neue Db2-Wiederherstellungseinheit wird automatisch die entsprechende Planauswahl-Exit-Routine aufgerufen. Diese Exit-Routine liest den temporären Speichersatz und verwendet den darin enthaltenen Plan-Namen für die Planauswahl.
Wenn für die Natural-Sitzung kein temporärer Speichersatz existiert, kann ein im Plan-Exit enthaltener Standard-Plan-Name verwendet werden. Wenn durch den Exit kein Plan-Name angegeben ist, wird der Name des Plans verwendet, der dem Namen des statischen Programms (DBRM) entspricht, das den SQL-Aufruf absetzt. Wenn kein solcher Plan-Name existiert, kommt es zu einem SQL-Fehler.
Anmerkung:
Dies ist ein Auszug aus
Syntax 1
- Extended Set und
Syntax-Element-Beschreibung
im Abschnitt SELECT
(SQL) (Statements-Dokumentation) und
beschreibt nur die spezifischen Änderungen für Natural for Db2 Version
8.4.
[WITH_CTE
common-table-expression,
]
|
||||||||||||
SELECT
selection into-clause
table-expression
|
||||||||||||
|
|
|
||||||||||
[ORDER BY criteria] |
||||||||||||
OPTIMIZE FOR integer |
|
|||||||||||
[WITH isolation-level] |
||||||||||||
[SKIP LOCKED DATA] |
||||||||||||
[QUERYNO integer]
|
||||||||||||
[OFFSET
row-count] |
||||||||||||
[FETCH
FIRST row-limit] |
||||||||||||
[WITH HOLD]
|
||||||||||||
[WITH RETURN]
|
||||||||||||
[WITH scroll-mode] |
||||||||||||
[WITH ROWSET POSITIONING FOR
max-rowsets] |
||||||||||||
[IF
NO RECORDS FOUND instruction] |
||||||||||||
statement | ||||||||||||
|
- OFFSET row-count
OFFSET
[offset-row-count]
ROW
ROWS
Die
OFFSET
-Klausel gibt die Anzahl der Zeilen an, die in der Ergebnistabelle übersprungen werden sollen, bevor Zeilen von dort abgerufen werden. Eine begrenzte Anzahl von Zeilen am Ende einer Ergebnismenge kann die Leistung von Abfragen mit potenziell großen Ergebnismengen verbessern.
offset-row-count
ist eine numerische Variable oder Konstante, die die Anzahl der zu überspringenden Zeilen bestimmt. Die Zahl muss Null (0
) oder eine positive ganze Zahl sein.- FETCH FIRST row-limit
FETCH FIRST
1
row-count
ROW
ROWS
Die
FETCH FIRST
-Klausel begrenzt die Anzahl der abzurufenden Zeilen. Eine begrenzte Anzahl von Zeilen kann die Leistung von Abfragen mit potenziell großen Ergebnismengen verbessern.
row-count
gibt eine numerische Variable oder Konstante an, die die Anzahl der abzurufenden Zeilen bestimmt. Die Zahl muss eine positive Ganzzahl sein.
Anmerkung:
Dies ist ein Auszug aus dem Kapitel
MERGE ( SQL)
(Statements-Dokumentation) und beschreibt nur die
spezifischen Änderungen für Natural for Db2 Version 8.4.
Syntax-Element | Beschreibung |
---|---|
MERGE INTO |
MERGE INTO-Klausel:
|
table-name |
Tabellenname:
Identifiziert das Ziel der |
[AS]
correlation-name
|
[AS]
correlation-name-Klausel:
Gibt einen alternativen Namen für die Zieltabelle an. Der alternative Name kann als Qualifikationsmerkmal verwendet werden, wenn auf Spalten der Zwischenergebnistabelle verwiesen wird. |
include-columns |
Include Columns-Klausel:
Gibt einen Satz von Spalten an, die zusammen mit den
Spalten der Zieltabelle in die Ergebnistabelle des
|
USING
source-table |
USING
source-table-Klausel:
Gibt die Werte für die Zeilendaten an, die in der Zieltabelle zusammengeführt werden sollen. |
ON
search-condition |
ON
search-condition-Klausel:
Gibt Join-Bedingungen zwischen der Quelltabelle und der Zieltabelle an. Jeder Spaltenname in der Suchbedingung muss eine Spalte der Zieltabelle oder der Quelltabelle bezeichnen. |
WHEN
matching-condition |
WHEN
matching-condition-Klausel:
Gibt die Bedingung an, für die die in der folgenden
|
THEN
modification-operation |
THEN
modification-operation-Klausel:
Gibt die Operation an, die bei den Übereinstimmungen mit
der in der vorangehenden |
ELSE IGNORE |
ELSE IGNORE-Klausel:
Legt fest, dass bei Quellspalten, die die in der
|
NOT ATOMIC CONTINUE ON
SQLEXCEPTION |
NOT ATOMIC CONTINUE ON
SQLEXCEPTION-Klausel:
Gibt an, ob die Zusammenführungsverarbeitung fortgesetzt wird, wenn bei der Verarbeitung einer Zeile eines Satzes von Quellzeilen ein Fehler auftritt. |
QUERYNO
integer |
QUERYNO
integer-Klausel:
Gibt die Nummer für dieses SQL-Statement an, die in der EXPLAIN-Ausgabe und den Db2-Trace-Aufzeichnungen verwendet wird. |
[NOT ]
MATCHED [AND
search-condition]
|
Syntax-Element | Beschreibung |
---|---|
[NOT] MATCHED |
Gibt die
modification-operation
(Änderungsoperation) an, die durchgeführt werden soll, wenn eine ON
search-condition -Suchbedingung als wahr oder
nicht wahr ausgewertet wird (NOT kann optional angegeben
werden).
|
AND
search-condition |
Gibt eine (optionale) zusätzliche
Bedingung an, die als wahr ausgewertet werden muss, bevor die
modification-operation
durchgeführt wird.
|
update-operation )
|
||||
DELETE |
||||
signal-operation |
||||
insert-operation |
Syntax-Element | Beschreibung |
---|---|
update-operation |
Gibt an, dass die übereinstimmende
Zielzeile mit den in der Zuweisungsklausel (UPDATE
SET assignment-clause)
zugewiesenen Werten geändert wird.
Eine |
DELETE |
Gibt an, dass die übereinstimmende
Zielzeile gelöscht wird. Eine DELETE -Operation ist nur zulässig,
wenn die Übereinstimmungsbedingung
(matching-condition ) als wahr
ausgewertet wird.
|
signal-operation |
Gibt den SQL-Fehler an, der ausgelöst
werden soll.
Eine |
insert-operation |
Gibt die Zeilen an, die in die
Zieltabelle eingefügt werden sollen.
Eine |
SIGNAL
SQLSTATE
[VALUE] sqlstate
[SET
MESSAGE_TEXT =
scalar-expression ] |
Zusammenführung von Verkaufsdaten aus der Tabelle
MSALES
in die Tabelle MPRODUCT
. Demonstration der
MERGE-
Operation mit den Statements DELETE
,
UPDATE
, INSERT
und SIGNAL
.
DEFINE DATA LOCAL USING DEMSQLCA LOCAL 1 V1 VIEW OF MPRODUCT 2 ID 2 NAME 2 INVENTORY 1 #M_TEXT (A10) INIT <'Oversold: '> END-DEFINE ... MERGE INTO MPRODUCT AS T USING (SELECT MSALES.ID ,SUM(MSALES.SOLD) AS SOLD, MAX(MCATALOG.NAME) AS NAME FROM MSALES, MCATALOG WHERE MSALES.ID = MCATALOG.ID GROUP BY MSALES.ID) AS S (ID,SOLD,NAME) ON S.ID = T.ID WHEN MATCHED AND T.INVENTORY = S.SOLD THEN DELETE WHEN MATCHED AND T.INVENTORY < S.SOLD THEN SIGNAL SQLSTATE '78000' SET MESSAGE_TEXT =:#M_TEXT || S.NAME WHEN MATCHED THEN UPDATE SET T.INVENTORY = T.INVENTORY - S.SOLD WHEN NOT MATCHED THEN INSERT VALUES(S.ID, S.NAME, -S.SOLD) END TRANSACTION END
Anmerkung:
Dies ist ein Auszug aus
Syntax 1 -
Searched DELETE im Kapitel
DELETE
(SQL) (Statements-Dokumentation) und
beschreibt nur die spezifischen Änderungen für Natural for Db2 Version
8.4.
DELETE FROM
table-name
[period-clause]
[correlation-name]
|
|||||||
[include-columns [SET
assignment-clause]]
|
|||||||
[WHERE
search-condition]
|
|||||||
[FETCH FIRST
row-limit |
|||||||
WITH
|
|
[SKIP LOCKED DATA ] [QUERYNO
integer]
|
Die FETCH FIRST
-Klausel begrenzt die Auswirkungen des
DELETE
-Statement auf eine Teilmenge der in Frage kommenden Zeilen.
Entspricht der beim SELECT
-Statement unter
FETCH FIRST
row-limit beschriebenen FETCH FIRST
-Klausel
zur Begrenzung der Zeilen.
Anmerkung:
Dies ist ein Auszug aus dem Kapitel
DELETE
(SQL) (Statements-Dokumentation) und
beschreibt nur die spezifischen Änderungen für Natural for Db2 Version
8.4.
scalar-expression | comparison | scalar-expression | ||||
row-value-expression | comparison | row-value-expression |
Ein comparison-predicate
vergleicht zwei Werte oder einen Satz Werte mit einem anderen Satz Werte.
Im obigen Syntax-Diagramm kann
comparison
einer der folgenden Operatoren sein:
=
|
gleich |
<
|
kleiner als |
>
|
größer als |
<=
|
kleiner gleich |
>=
|
größer gleich |
<>
|
ungleich |