Dieses Dokument behandelt grundlegende Syntaxbestandteile, die dann in den Beschreibungen der einzelnen Statements nicht mehr näher erläutert werden.
Dieses Dokument behandelt folgende Themen:
Die in den Syntaxbeschreibungen von Natural-SQL-Statements verwendeten Konstanten sind:
constant
|
Das Element
constant bezieht sich immer auf eine
Natural-Konstante.
|
integer
|
Das Element
integer bezieht sich immer auf eine
Ganzzahl-Konstante.
|
Anmerkung:
Wenn das Dezimalzeichen mit dem (Session-Parameter
DC
) auf Komma
(,) gesetzt ist, darf unmittelbar nach einer numerischen Konstanten kein Komma
angegeben werden, sondern es muss ein Leerzeichen dazwischen stehen, weil es
sonst zu einem Systemfehler kommt oder zu falschen Ergebnissen kommen
kann.
Ungültige Syntax: | Gültige Syntax: |
---|---|
|
|
Eine SQL-Datetime-Konstante ist eine Zeichenkettenkonstante mit besonderem Format, die Folgendes angibt:
DATE
string-constant
|
SQL-Datumskonstante, zum Beispiel:
DATE '2013-15-01' .
|
TIME
string-constant
|
SQL-Uhrzeitkonstante, zum Beispiel:
TIME '10:30:15' .
|
TIMESTAMP
string-constant |
SQL-Zeitstempelkonstante, zum Beispiel:
TIMESTAMP '2014-15-01 10:20:15.123456' .
|
Informationen zu den gültigen
string-constant
-Formaten siehe IBM's
Db2 SQL reference information
Die in den Syntaxbeschreibungen von Natural-SQL-Statements verwendeten Namen sind:
Ein
authorization-identifier
, der auch
"creator name" genannt wird, dient zur Qualifizierung von
Datenbanktabellen und Views (Datenbanksichten). Siehe auch
authorization-identifier
unter table-name
weiter unten.
Ein ddm-name
ist immer der
Name eines mit der Natural-Utility
SYSDDM
erzeugten Natural Data Definition
Module (DDM).
Ein view-name
ist immer
der Name einer im DEFINE
DATA
-Statement definierten Natural-View (Datenbanksicht).
Ein column-name
ist immer
der Name einer physischen Datenbankspalte.
Ein location-name
bezeichnet den Standort einer Tabelle. Die Angabe des
location-name
ist optional (gehört zum
SQL Extended Set).
Das Element table-name
in
diesem Kapitel dient zur Referenzierung von SQL-Basistabellen und
SQL-Viewed-Tabellen.
Syntax:
[[location-name.]authorization-identifier.]ddm-name |
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung |
---|---|
ddm-name |
Für jede Tabelle muss ein entsprechendes Natural-DDM existieren. Der Name dieses DDM muss mit dem Namen der entsprechenden physischen Datenbanktabelle bzw. der View (Datenbanksicht) identisch sein. |
location-name |
Dieses optionale Element bezeichnet den Standort der Tabelle, auf die zugegriffen werden soll. |
authorization-identifier |
Es gibt zwei Arten, den
authorization-identifier einer
Datenbanktabelle bzw. einer View (Datenbanksicht) anzugeben.
Die eine Art entspricht der Standard-SQL-Syntax:
Beispiel: DEFINE DATA LOCAL 01 PERS VIEW OF PERSONNEL 02 NAME 02 AGE END-DEFINE SELECT * INTO VIEW PERS FROM SQL.PERSONNEL ... Die andere Möglichkeit besteht darin, den
Anmerkung: Beispiel: DEFINE DATA LOCAL 01 PERS VIEW OF SQL-PERSONNEL 02 NAME 02 AGE END-DEFINE SELECT * INTO VIEW PERS FROM SQL-PERSONNEL ... Wenn der
Die Beispiel: ... DELETE FROM SQL.PERSONNEL WHERE AGE IS NULL ... ... INSERT INTO SQL.PERSONNEL (NAME,AGE) VALUES ('ADKINSON',35) ... ... UPDATE SQL.PERSONNEL SET SALARY = SALARY * 1.1 WHERE AGE > 30 ... |
Der correlation-name
ist
ein Alias-Name für einen table-name
.
Er kann zur Qualifizierung von Spaltennamen verwendet werden. Außerdem dient er
dazu, implizit Felder in einer Natural-View (Datenbanksicht) zu qualifizieren,
der in der INTO
-Klausel eines
SELECT
-Statements
verwendet wird.
Beispiel:
DEFINE DATA LOCAL 01 PERS-NAME (A20) 01 EMPL-NAME (A20) 01 AGE (I2) END-DEFINE ... SELECT X.NAME , Y.NAME , X.AGE INTO PERS-NAME , EMPL-NAME , AGE FROM SQL-PERSONNEL X , SQL-EMPLOYEES Y WHERE X.AGE = Y.AGE END-SELECT ...
Die Verwendung von
correlation-names
ist zwar in der Regel
nicht nötig, kann aber helfen, die Lesbarkeit eines Statements zu erleichtern.
Syntax des Elements
parameter
:
[[:sql-type]:]
host-variable
[INDICATOR
[: ]
host-variable] [LINDICATOR [: ]
host-variable]
|
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
sql-type |
Ein
sql-type gibt den SQL-Datentyp der
host-variable an, wenn sie für den
Zugriff auf Db2 verwendet wird. Die Angabe des
sql-type ist optional, weil die meisten
SQL-Datentypen implizit zu Natural-Host-Variablen zugeordnet werden. Für einige
Natural-Host-Variablen kann der SQL-Datentyp jedoch nicht implizit zugeordnet
werden.
Wenn ein |
||||||||||||||||||||
|
|||||||||||||||||||||
Siehe auch Natural-Formate und SQL-Datentypen. | |||||||||||||||||||||
host-variable
|
Eine
host-variable ist eine in einem
SQL-Statement referenzierte Natural-Programmvariable (keine Systemvariable),
die entweder ein eigenständiges Feld oder Teil einer View (Datenbanksicht) sein
kann.
Wenn sie als empfangendes Feld (z.B. in einer
Wenn sie als sendendes Feld (z.B. in einer
Siehe auch Natural-Formate und SQL-Datentypen. |
||||||||||||||||||||
[:]
|
Doppelpunkt:
Gemäß den SQL-Standards kann einer
Beispiel: SELECT NAME INTO :#NAME FROM PERSONNEL WHERE AGE = :VALUE Wenn ein Variablenname mit einem für SQL reservierten Wort
identisch ist, ist der Doppelpunkt ebenfalls erforderlich. In Situationen, in
denen entweder eine |
||||||||||||||||||||
INDICATOR
|
INDICATOR-Klausel:
Diese Klausel ist optional und dient dazu, herauszufinden, ob eine zu lesende Spalte "Null" ist, d.h. keinen Wert enthält, oder tatsächlich den Wert Null (0) bzw. Leerzeichen enthält. Wenn sie mit einer empfangenden
Beispiel: DEFINE DATA LOCAL 1 NAME (A20) 1 NAMEIND (I2) END-DEFINE SELECT * INTO NAME INDICATOR NAMEIND ... In diesem Beispiel ist Ist ein Null-Indikatorfeld angegeben und die gelesene Spalte ist Null, wird das Indikatorfeld auf einen negativen Wert und das Zielfeld je nach Datentyp auf Null (0) bzw. Leerzeichen gesetzt. Andernfalls ist der Wert des Null-Indikatorfeldes größer als oder gleich Null (0). Wenn sie mit einer sendenden
Beispiel: DEFINE DATA LOCAL 1 NAME (A20) 1 NAMEIND (I2) UPDATE ... SET NAME = :NAME INDICATOR :NAMEIND WHERE ... In diesem Beispiel ist Eine |
||||||||||||||||||||
LINDICATOR
|
LINDICATOR-Klausel:
Diese Klausel ist optional und dient zur Unterstützung von
Spalten mit variabler Länge, z.B. des Typs Wenn sie mit einer empfangenden
Enthält die Beispiel: DEFINE DATA LOCAL 1 ADDRESSLIND (I2) 1 ADDRESS (A50/1:6) END-DEFINE SELECT * INTO :ADDRESS(*) LINDICATOR :ADDRESSLIND ... In diesem Besipiel erhält Wenn es mit einer sendenden
Beispiel: DEFINE DATA LOCAL 1 NAMELIND (I2) 1 NAME (A20) 1 AGE (I2) END-DEFINE MOVE 4 TO NAMELIND MOVE 'ABC%' TO NAME SELECT AGE INTO :AGE WHERE NAME LIKE :NAME LINDICATOR :NAMELIND ... Eine Wenn das Wenn das Feld als Ein Feld fester Länge soll zum Beispiel mit einem als I2
angegebenen |
Diese Klausel gehört zum
SQL Extended Set. Sie
steht in den folgenden Statements zur Verfügung:
DELETE
,
INSERT
,
MERGE
und
UPDATE
.
Syntax der
include-columns
-Klausel:
INCLUDE
(column-name
data-type,...)
|
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung |
---|---|
INCLUDE |
Mit dem Schlüsselwort
INCLUDE wird eine Liste mit Spalten eingeleitet, welche in die
Ergebnistabelle eines DELETE -, INSERT -,
MERGE - oder UPDATE -Statements aufgenommen werden
soll. INCLUDE kann nur dann angegeben werden, wenn ein
DELETE -, INSERT -, MERGE - oder
UPDATE -Statement in der FROM -Klausel eines
SELECT -Statements
verschachtelt ist.
|
column-name |
Gibt den Namen einer Spalte der
Ergebnistabelle des MERGE -Statements an, der nicht derselbe Name
ist wie der einer anderen
include-column oder einer Spalte in der
Zieltabelle.
|
data-type |
Gibt den Datentyp der
include-column an. Siehe
data-type
weiter unten.
|
built-in-type | ||
distinct-type |
Syntax-Element-Beschreibung:
Diese Klausel gehört zum
SQL Extended Set. Sie
steht in den folgenden Statements zur Verfügung:
Searched
DELETE
und
Searched
UPDATE
.
Syntax:
FOR PORTION
OF BUSINESS_TIME
FROM
expr1
TO
expr2 |
Syntax-Element-Beschreibung:
Das Natural-Format einer
host-variable
wird entsprechend der folgenden Tabelle in einen SQL-Datentyp umgesetzt:
Natural-Format/Länge | SQL-Datentyp |
---|---|
An, A DYNAMIC | CHAR (n) , VARCHAR(n), CLOB(n) |
B2 | SMALLINT |
B4 | INT |
F4 | REAL |
F8 | DOUBLE PRECISION |
I2 | SMALLINT |
I4 | INT |
Nnn.m | NUMERIC (nn+m,m) |
Pnn.m | NUMERIC (nn+m,m) |
T, A8 | TIME |
T (COMPOPT DB2TSTI=ON) | TIMESTAMP |
D, A10 | DATE |
A26 | TIMESTAMP |
A19 | TIMESTAMP(0) |
A20+n | TIMESTAMP(n) (1<=n<=12) |
A25 | TIMESTAMP(0) WITH TIMEZONE |
A26+n | TIMESTAMP(n) WITH TIMEZONE (1<=n<=12) |
Gn; nur für View-Felder | GRAPHIC (n) |
Un, U DYNAMIC | GRAPHIC (n) ,VARGRAPHIC(n), DBCLOB(n) CCSID 1200 |
Bn, B DYNAMIC | BINARY(n), VARBINARY(n), BLOB(n) |
P19.0 | BIGINT |
F8 | DECFLOAT(n) |
A DYNAMIC, B DYNAMIC, U DYNAMIC | XML |
Gruppenstruktur (I4,I4,I4,A255) prefixed with :BLOBFILE: | BLOB-Datei-Referenz |
Gruppenstruktur (I4,I4,I4,A255) prefixed with :CLOBFILE: | CLOB-Datei-Referenz |
Gruppenstruktur (I4,I4,I4,A255) prefixed with :DBCLOBFILE: | DBCLOB-Datei-Referenz |
I4 mit Präfix :BLOBLOC: | BLOB-Lokator |
I4 mit Präfix :CLOBLOC: | CLOB-Lokator |
I4 mit Präfix :DBCLOBLOC: | DBCLOB-Lokator |
Natural überprüft nicht, ob der konvertierte SQL-Datentyp mit der Datenbankspalte kompatibel ist. Außer bei Feldern mit Format N wird keine Datenkonvertierung vorgenommen.
Bei Natural SQL gibt es zu den Standard-Natural-Formaten noch folgende Erweiterungen:
Um alphanumerische Spalten zu unterstützen, die länger als 253
Bytes sind, kann ein eindimensionales Array vom Format A verwendet werden. Der
Index dieses Arrays muss mit 1 anfangen und kann nur mit einem Stern (*)
referenziert werden. Der entsprechende SQL-Datentyp ist CHAR
(n)
, wobei
n
die Gesamtanzahl der Bytes im Array
ist.
Um Spalten mit variabler Länge zu unterstützen, kann eine
host-variable
mit Schlüsselwort
LINDICATOR
verwendet werden. Der entsprechende SQL-Datentyp ist
VARCHAR (n)
; vgl.
LINDICATOR-Klausel.
Die Natural-Formate Datum (D) und Zeit (T) können bei Natural
for Db2 verwendet werden. Sie werden in die entsprechenden
datenbank-spezifischen Formate Db2 DATE
und TIME
umgesetzt.
Ein sendendes Feld, das als eindimensionales Array ohne
LINDICATOR
-Feld angegeben wird, wird in den SQL-Datentyp
VARCHAR
umgesetzt. Seine Länge ist die Gesamtanzahl der Bytes des
Arrays ohne Berücksichtigung nachgestellter Leerzeichen.