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. 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 eines im DEFINE
DATA
-Statement definierten Natural View.
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. des View 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. eines View 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 einem Natural-View 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 eines View 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:
Syntax-Element | Beschreibung |
---|---|
built-in-type |
Specifies a built-in data type. See the IBM DB2 for z/OS documentation for a description of built-in types. |
distinct-type |
Specifies a distinct type. |
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.