Damit Natural auf eine Db2-Tabelle zugreifen kann, muss ein logisches Natural-Datendefinitionsmodul (DDM) für die Tabelle generiert werden. Dies geschieht entweder mit Predict (Einzelheiten finden Sie in der entsprechenden Predict-Dokumentation) oder mit der Natural Utility SYSDDM. Siehe auch DDM-Editor (SYSDDM Utility) in der Natural Editoren-Dokumentation.
Wenn Sie Predict nicht installiert haben, verwenden Sie die SYSDDM-Funktion SQL Services, um Natural DDMs aus Db2-Tabellen zu erzeugen. Diese Funktion wird über das Hauptmenü der Utility SYSDDM aufgerufen und auf den folgenden Seiten beschrieben.
Weitere Informationen zu Natural DDMs finden Sie unter Datendefinitionsmodule (DDMs) im Natural-Leitfaden zur Programmierung .
In diesem Kapitel werden die folgenden Themen behandelt:
Die Funktion SQL Services (NDB) der
Natural-Utility SYSDDM (siehe SYSDDM Pflege- und
Service-Funktionen benutzen in der
Natural-Editoren-Dokumentation) wird für den Zugriff auf
Db2-Tabellen verwendet. Sie können damit auf den Katalog des Db2-Servers
zugreifen, mit dem Sie verbunden sind, indem Sie z.B. die Funktion
Environment Setting benutzen, wie in Natural
Tools for DB2 beschrieben, oder indem Sie den Namen eines Servers in
das Feld Server Name im Menü SQL
Services eingeben. Der Name des Db2-Servers, mit dem Sie verbunden
sind, wird dann in der oberen linken Ecke des Bildschirms SQL
Services Menu angezeigt. Sie können auf jeden Db2-Server zugreifen,
der sich entweder auf einem Großrechner (z/OS) oder einer UNIX-Plattform
befindet, wenn die Server über DRDA (Distributed Relational Database
Architecture) verbunden wurden. Weitere Einzelheiten zur Verbindung von
Db2-Servern und Informationen zur Bindung des Anwendungs-Package (SYSDDM
verwendet das E/A-Modul NDBIOMO
) für den
Zugriff auf Daten auf entfernten Servern finden Sie in der entsprechenden
IBM-Literatur.
Die Funktion SQL Services ermittelt, ob Sie mit einem Großrechner-Db2 oder einem UNIX-Db2 verbunden sind, greift auf den entsprechenden Db2-Katalog zu und führt die unten aufgeführten Funktionen aus.
Anmerkung:
Wenn Sie die SYSDDM SQL Services in einer
CICS-Umgebung ohne File Server verwenden, müssen Sie
CONVERS=ON
im NTDB2
-Makro
angeben, andernfalls erhalten Sie möglicherweise SQLCODE -518.
SQL-Tabelle aus einer Liste auswählen – Funktion: Select SQL Table from a List
DDM aus einer SQL-Tabelle generieren – Funktion: Generate DDM from an SQL Table
Spalten einer SQL-Tabelle auflisten – Funktion: List Columns
Um die Funktion SQL Services aufzurufen:
Geben Sie in der Kommandozeile das Natural-Systemkommando
SYSDDM
ein und drücken Sie Enter.
Oder:
Wählen Sie im Natural-Hauptmenü den Menüpunkt Maintenance and Transfer Utilities, um das Menü Maintenance and Transfer Utilities aufzurufen.
Wählen Sie im Menü Maintenance and Transfer Utilities die Option Maintain DDMs.
Das Menü der Utility SYSDDM wird angezeigt. Die Felder und Funktionen im Menü der Utility SYSDDM werden im Kapitel SYSDDM Pflege- und Service-Funktionen benutzen erläutert.
Geben Sie im Feld Code
des Menüs der Utility
SYSDDM den Code B
ein und drücken Sie Enter.
Das Menü SQL Services wird angezeigt.
11:31:39 ***** NATURAL SYSDDM UTILITY ***** 2009-11-27 Server DAEFDB29 - SQL Services: Menu - Code Function S Select SQL Table from a List G Generate DDM from an SQL Table L List Columns of an SQL Table ? Help . Exit Code ... _ Table name ... ________________________________ Creator ...... ________________________________ Replace ...... N (Y,N) DDM Name with Creator .. Y (Y/N) Server name .. DAEFDB29__________ Remark ....... O (Overwrite/SQL/Comment) Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Exit Canc |
Die auf diesem Bildschirm verfügbaren Funktionen werden in den entsprechenden Abschnitten beschrieben.
Die Funktion Select SQL Table from a List dient dazu, eine Db2-Tabelle aus einer Liste zur weiteren Bearbeitung auszuwählen.
Um die Funktion Select SQL Table from a List aufzurufen:
Geben Sie im Bildschirm SQL Services
Menu den Funktionscode S
ein.
Wenn Sie nur den Funktionscode eingeben, erhalten Sie eine Liste aller im Db2-Katalog definierten Tabellen.
Wenn Sie nicht eine Liste aller Tabellen, sondern nur einen bestimmten Bereich von Tabellen auflisten möchten, können Sie zusätzlich zum Funktionscode einen Wert in den Feldern Table Name und/oder Creator (Ersteller) angeben. Sie können Stern-Notation (*) oder das Größer-als-Zeichen (>) als Anfangswert verwenden.
Drücken Sie Enter.
Der Bildschirm Select SQL Table From a List wird aufgerufen. Er zeigt eine Liste aller angeforderten Db2-Tabellen an. In der Liste können Sie eine Db2-Tabelle mit einem Funktionscode markieren:
Code | Funktion | Beschreibung |
---|---|---|
G |
Generate DDM from an SQL Table | Mit dieser Funktion können Sie auf der Basis der Definitionen im Db2-Katalog ein Natural DDM aus einer Db2-Tabelle generieren. |
L |
List Columns of an SQL Table | Diese Funktion listet alle Spalten einer bestimmten Db2-Tabelle auf. |
Mit dieser Funktion können Sie auf der Basis der Definitionen im Db2-Katalog ein Natural DDM aus einer Db2-Tabelle generieren.
Die folgenden Themen werden in diesem Abschnitt behandelt:
Um die Funktion aufzurufen:
Geben Sie im Bildschirm SQL Services
Menu den Funktionscode G
zusammen mit dem Namen und dem
Ersteller (Creator) der Tabelle ein, für die Sie einen DDM generieren
möchten.
Wenn Sie den Tabellennamen oder den Ersteller nicht kennen, können Sie die Funktion Select SQL Table from a List benutzen, um die gewünschte Tabelle auszuwählen.
Wenn Sie nicht möchten, dass der Ersteller der Tabelle
Teil des DDM-Namens ist, geben Sie ein N
(Nein) in das Feld
DDM Name with Creator ein. Die Standardeinstellung ist
Y
(Ja).
Wenn Sie ein DDM für eine Tabelle generieren möchten,
für die bereits ein DDM existiert, und Sie möchten, dass das bestehende DDM
durch das neu generierte DDM ersetzt wird, geben Sie ein Y
(Ja) in
das Feld Replace (Ersetzen) ein.
Standardmäßig ist Replace auf
N
(Nein) eingestellt, um zu verhindern, dass ein vorhandenes DDM
versehentlich ersetzt wird.
Im Feld Remark können Sie den Inhalt der DDM-Spalte Remark angeben. Geben Sie ein:
O (Overwrite)
|
für SQL-Spaltenbemerkungen, falls definiert, überschrieben durch Feldinformationen, die von Natural generiert werden, falls vorhanden. Dies ist die Standardeinstellung. |
S (SQL) für
SQL-Spaltenbemerkungen, falls definiert, sonst leer.
|
|
C (Comment)
|
für Feldinformationen, die von Natural generiert werden, falls verfügbar. SQL-Spaltenbemerkungen werden in eine separate DDM-Kommentarzeile kopiert. |
Standardmäßig ist Remark auf
O
(Overwrite) gesetzt.
Um einen Standardwert für die Felder
Code, Table Name (Tabellenname),
Creator (Ersteller), Replace
(Ersetzen), DDM Name with Creator (DDM-Name mit Ersteller)
oder Remark (Bemerkung) zu definieren oder zu ändern,
verwenden Sie den User-Exit NDBDDM-2
und seinen Datenbereich
NDBDDM-L, der in der Library SYSDB2 enthalten ist. Siehe
Eine User Exit
Routine verfügbar machen. Detaillierte Informationen zur
Handhabung von NDBDDM-2
finden Sie in den Erläuterungen im
Quellcode.
Wichtig:
Da die Angabe von Sonderzeichen als Teil eines
Feld- oder DDM-Namens den Natural-Namenskonventionen widerspricht, müssen alle
in Db2 zulässigen Sonderzeichen vermieden werden. Auch abgegrenzte
Db2-Bezeichner müssen vermieden werden.
Um das Auftreten von Fenstern mit Benutzerinteraktion während
der DDM-Feldgenerierung zu vermeiden, kann der in der Library SYSDB2 enthaltene
User-Exit NDBDDM-1
und sein Datenbereich NDBDDM-L
verwendet werden. Detaillierte Informationen zur Handhabung von
NDBDDM-1
finden Sie in den Anmerkungen im Quellcode. Siehe auch
Eine User Exit
Routine verfügbar machen.
Wenn die Funktion Generate DDM from an SQL Table für eine Tabelle aufgerufen wird, für die zum ersten Mal ein DDM generiert werden soll, wird der Bildschirm DBID/FNR Assignment angezeigt. Wenn ein DDM für eine Tabelle generiert werden soll, für die bereits ein DDM existiert, werden die vorhandene DBID und FNR verwendet und der Bildschirm DBID/ FNR-Assignment erscheint nicht.
Geben Sie auf dem Bildschirm DBID/FNR-Assignment eine der bei der Natural-Installation gewählten Datenbankkennungen (DBIDs) und die Dateinummer (FNR) ein, die der Db2-Tabelle zugewiesen werden soll. Natural benötigt diese Angaben nur zu Identifikationszwecken.
Der Bereich der DBIDs, der für Db2-Tabellen reserviert ist, wird
im NTDB
-Makro
des Natural-Parametermoduls (siehe Natural Parameter
Referenz-Dokumentation) für den Datenbanktyp Db2 angegeben. Jede
DBID, die nicht in diesem Bereich liegt, wird nicht akzeptiert. Die FNR kann
eine beliebige gültige Dateinummer innerhalb der Datenbank sein (zwischen
1
und 65535
).
Nachdem eine gültige DBID und FNR zugewiesen worden sind, wird automatisch ein DDM aus der angegebenen Tabelle erzeugt.
Die von Natural unterstützte maximale Feldlänge beträgt 1 GB-1 (1073741823 Bytes). Wenn eine Db2-Tabelle eine Spalte enthält, die länger als 253 Bytes ist, oder wenn eine Db2-Spalte als Db2-LOB-Feld definiert ist, wird automatisch das Fenster Long Field Generation aufgerufen. Ein Db2-LOB-Feld kann als einfache Natural-Variable mit einer maximalen Länge von 1 GB-1 oder als dynamische Natural-Variable definiert werden.
Ein Feld, das länger als 253 Bytes ist und kein Db2-LOB-Feld ist, kann als einfaches Natural-Feld mit einer maximalen Länge von 1GB-1 oder als Array definiert werden. Im DDM wird ein solches Array als eine multiple Variable dargestellt.
Wenn z.B. eine Db2-Spalte eine Länge von 2000 Bytes hat, können Sie eine Array-Elementlänge von 200 Bytes angeben, und Sie erhalten ein multiples Feld mit 10 Ausprägungen, jede Ausprägung mit einer Länge von 200 Bytes.
Da generierte lange Felder keine multiplen Felder im Sinne von Natural sind, ergibt die Natural-C*-Notation hier keinen Sinn und wird daher nicht unterstützt.
Wenn ein solches generiertes langes Feld in einer Natural-Datensicht (View) definiert ist, die von Natural-SQL-Statements referenziert werden soll (d. h. von Host-Variablen, die multiple Felder darstellen), muss der angegebene Bereich von Ausprägungen (Indexbereich) sowohl bei der Definition als auch bei der Referenzierung immer mit Ausprägung 1 beginnen. Wenn nicht, wird ein Natural-Syntaxfehler zurückgegeben.
UPDATE table SET varchar = #arr(*) SELECT ... INTO #arr(1:5)
Anmerkung:
Wenn ein solches generiertes langes Feld mit dem Natural DML
UPDATE
-Statement
aktualisiert wird, muss darauf geachtet werden, dass jede Ausprägung
ordnungsgemäß aktualisiert wird.
Für jeden der oben aufgeführten Spaltentypen wird im DDM ein
zusätzliches Längenindikatorfeld (Format/Länge I2 bzw. I4 für LOB-Felder)
generiert. Die Länge wird immer in der Anzahl der Zeichen und nicht in Bytes
gemessen. Um die Anzahl der Bytes eines VARGRAPHIC
-, LONG
VARGRAPHIC
- oder DBCLOB
-Feldes zu erhalten, muss die Länge
mit 2 multipliziert werden.
Der Name eines Längenindikatorfeldes beginnt mit L@, gefolgt vom Namen des entsprechenden Feldes. Der Wert des Längenindikatorfelds kann von einem Natural-Programm überprüft oder aktualisiert werden.
Ist das Längenindikatorfeld nicht Teil der Natural-View und
handelt es sich bei dem entsprechenden Feld um ein redefiniertes langes Feld,
wird die Länge dieses Feldes bei UPDATE
- und
STORE
-Operationen ohne nachgestellte Leerzeichen berechnet.
Mit Natural ist es möglich, zwischen einem Wert
NULL
und dem tatsächlichen Wert Null (0) oder Blank (Leerzeichen)
in einer Db2-Spalte zu unterscheiden.
Wenn ein Natural DDM aus dem Db2-Katalog generiert wird, wird
ein zusätzliches NULL
-Indikatorfeld für jede Spalte generiert, die
NULL
sein kann, d.h. für die weder NOT NULL
noch
NOT NULL WITH DEFAULT
angegeben ist.
Der Name des NULL
-Indikatorfeldes beginnt mit
N@
, gefolgt von dem Namen des entsprechenden Feldes.
Wenn die Spalte aus der Datenbank gelesen wird, enthält das
entsprechende Indikatorfeld entweder Null (0) (wenn die Spalte einen Wert
enthält, einschließlich des Wertes 0
oder Leerzeichen) oder
-1
(wenn die Spalte keinen Wert enthält).
Die Spalte NULLCOL CHAR(6)
in einer
Db2-Tabellendefinition ergibt die folgenden View-Felder führen:
NULLCOL A 6.0 N@NULLCOL I 2.0
Wenn das Feld NULLCOL
aus der Datenbank gelesen
wird, enthält das zusätzliche Feld N@NULLCOL
:
0
(Null), wenn NULLCOL
einen Wert
enthält (einschließlich des Wertes 0
oder Leerzeichen),
-1
(minus Eins), wenn NULLCOL
keinen Wert enthält.
Ein Nullwert kann in einem Datenbankfeld gespeichert werden,
indem -1
als Eingabe für das entsprechende
NULL
-Indikatorfeld eingegeben wird.
Anmerkung:
Wenn eine Spalte NULL
ist, wird ein impliziter
RESET
für das entsprechende Natural-Feld durchgeführt.
Für jede LOB-Spalte wird ein zusätzliches Locator-Feld im Format I4 generiert.
Ein LOB
Locator kann verwendet werden, um einen
LOB
-Wert im Db2-Datenbankserver zu referenzieren, wenn ein
LOB
-Wert nicht lokal in einem Programm benötigt wird.
Diese Funktion listet alle Spalten einer bestimmten Db2-Tabelle auf.
Um die Funktion List Columns aufzurufen:
Geben Sie im Bildschirm SQL Services Menu
den Funktionscode L
sowie den Namen und den Ersteller (Creator)
der Tabelle ein, deren Spalten Sie auflisten möchten, und drücken Sie
Enter.
Der Bildschirm List Columns für diese Tabelle wird aufgerufen. Er listet alle Spalten der angegebenen Tabelle auf und zeigt für jede Spalte die folgenden Informationen an:
Variable | Inhalt | |
---|---|---|
Name |
Db2-Name der Spalte. | |
Type |
Der Spaltentyp. | |
Length |
Die Länge (oder
Genauigkeit, wenn der Typ DECIMAL ist) der Spalte, wie im
Db2-Katalog definiert.
|
|
Scale |
Die
Dezimalskalierung der Spalte (nur anwendbar, wenn der Typ DECIMAL
ist).
|
|
Update |
Y
|
Die Spalte kann aktualisiert werden. |
N |
Die Spalte kann nicht aktualisiert werden. | |
Nulls |
Y
|
Die Spalte kann Nullwerte enthalten. |
N |
Die Spalte kann keine Nullwerte enthalten. | |
Not |
Eine Spalte, deren
Skalierungslänge oder deren Typ von Natural nicht unterstützt wird, wird mit
einem Stern (*) gekennzeichnet. Für eine solche Spalte kann kein View-Feld
generiert werden. Die maximal unterstützte Skalierungslänge beträgt 7 Bytes.
Die folgenden SQL-Typen werden
unterstützt: |
Die Datentypen DATE
, TIME
,
TIMESTAMP
, FLOAT
und ROWID
werden in
numerische oder alphanumerische Felder unterschiedlicher Länge konvertiert:
DATE
in A10, TIME
in A8, TIMESTAMP
in
A26, FLOAT
in F8 und ROWID
in A40. DATE
und TIME
können alternativ auf Natural DATE
bzw.
Natural TIME
abgebildet werden.
Für Db2 bietet Natural eine Db2
TIMESTAMP
-Spalte als alphanumerisches Feld (A26) im Format
YYYY-MM-DD-HH.II.SS.MMMMMM
. Alternativ
können Sie das Natural TIME
-Feld (Datenformat T) als Db2
TIMESTAMP
-Datentyp generieren, wenn die Option
DBTSTI
des Systemkommandos COMPOPT
auf ON
gesetzt ist (siehe Systemkommandos-Dokumentation).
Sie können das Natural-Subprogramm
NDBSTMP
verwenden, um TIMESTAMP
-Felder (A26) zu berechnen.
Sie können die Maske Generating Natural Data Definition
Modules (DDMs) mit der User-Exit-Routine NDBDDM-1
oder
NDBDDM-2
anpassen.
Um die User-Exit-Routine NDBDDM-1 oder NDBDDM-1 verfügbar zu machen:
Katalogisieren Sie das Quellcode-Objekt
NDBDDM-num
in der Library SYSDB2 unter
dem Namen NDBDDMUnum
.
Anmerkung:
Die Namen des Quellcode-Objekts und des katalogisierten
Objekts der User-Exit-Routine müssen unterschiedlich sein, damit beim
Überschreiben des Quellcode-Objekts bei einer Update-Installation das
katalogisierte Objekt nicht verändert wird.
Kopieren Sie
NDBDDMUnum
in die Steplib SYSLIBS.
Ein von der Utility SYSDDM verwendetes Subprogramm sucht in
der Steplib SYSLIBS nach
NDBDDMUnum
.