Natural-Datendefinitionsmodule (DDMs) generieren

#### Search Results

Search

# Natural-Datendefinitionsmodule (DDMs) generieren

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:

- SQL Services (NDB)

## SQL Services (NDB)

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 Services benutzen

- 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

- Eine User Exit Routine verfügbar machen

### SQL Services benutzen

Um die Funktion SQL Services aufzurufen:

1. Geben Sie in der Kommandozeile das Natural-Systemkommando `SYSDDM` ein und drücken Sie Enter.

   Oder:

   1. Wählen Sie im Natural-Hauptmenü den Menüpunkt Maintenance and Transfer Utilities, um das Menü Maintenance and Transfer Utilities aufzurufen.

   2. 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.

2. 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.

### SQL-Tabelle aus einer Liste auswählen – Funktion: Select SQL Table from a List

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.

### DDM aus einer SQL-Tabelle generieren – Funktion: 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.

Die folgenden Themen werden in diesem Abschnitt behandelt:

- Funktion Generate DDM from an SQL Table aufrufen
- Zuweisung von Standardwerten - Generierung von DDMs im Batch-Modus
- DBID/FNR- Zuweisung
- Generierung langer Felder
- Längenindikator für Felder mit variabler Länge: VARBINARY, VARCHAR, LONG VARCHAR, VARGRAPHIC, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB
- Nullwerte
- Locator-Feld für LOB-Spalte

#### Funktion Generate DDM from an SQL Table aufrufen

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.

#### Zuweisung von Standardwerten - Generierung von DDMs im Batch-Modus

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.

#### DBID/FNR- Zuweisung

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.

#### Generierung langer Felder

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.

#### Beispiel:

    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.

#### Längenindikator für Felder mit variabler Länge: VARBINARY, VARCHAR, LONG VARCHAR, VARGRAPHIC, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB

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.

#### Nullwerte

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).

#### Beispiel:

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.

#### Locator-Feld für LOB-Spalte

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.

### Spalten einer SQL-Tabelle auflisten – Funktion: List Columns

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: `BIGINT`, `BINARY`, `VARBINARY`, `DECFLOAT`, `XML` `CHAR`, `VARCHAR`, `LONG VARCHAR`, `GRAPHIC`, `VARGRAPHIC`, `LONG VARGRAPHIC`, `DECIMAL`, `INTEGER`, `SMALLINT`, `DATE`, `TIME`, `TIMESTAMP`, `FLOAT`, `ROWID`, `BLOB`, `CLOB` und `DBCLOB`.

  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.

### Eine User Exit Routine verfügbar machen

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:

1. 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.

2. Kopieren Sie `NDBDDMUnum` in die Steplib SYSLIBS.

   Ein von der Utility SYSDDM verwendetes Subprogramm sucht in der Steplib SYSLIBS nach `NDBDDMUnum`.