Dieser Abschnitt behandelt grundlegende Syntaxbestandteile, die dann in den Beschreibungen der einzelnen Statements nicht mehr näher erläutert werden.
Dieser Abschnitt 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 nachfolgend beschrieben.
Ein authorization-identifier, der auch
"creator name" genannt wird, dient zur Qualifizierung von
Datenbanktabellen und Views (Datensichten). 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 (Datensicht).
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 (Datensicht) 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 (Datensicht) 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 (Datensicht) 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 (Datensicht) 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 Beispiel 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.