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.