Um Natural-Programme, die Db2-Statements enthalten, statisch mit NDZ auszuführen, müssen Sie die statischen Generierungsschritte für jedes auszuführende Programm durchführen. Alle notwendigen Informationen zur statischen Programmvorbereitung und -ausführung mit NDZ werden in diesem Kapitel beschrieben.
Die statische Programmgenerierung für Natural for Db2 for zIIP (NDZ) ist unabhängig von der statischen Programmgenerierung von Natural for Db2 (NDB). Natural-Programme, die bereits für die statische Ausführung mit NDB vorbereitet sind, werden durch die Installation von NDZ in keiner Weise beeinträchtigt. Diese Programme werden weiterhin statisch mit NDB ausgeführt. Wenn jedoch eine Natural-Sitzung erfolgreich mit NDZ initialisiert wird, werden sie dynamisch ausgeführt, bis sie auch für die statische Ausführung mit NDZ vorbereitet sind.
Die Natural-Programme, die der statischen NDZ-Generierung und der statischen NDB-Generierung unterliegen, müssen nicht identisch sein. Ein Natural-Programm kann jedoch nur in einem SQLJ-Profil und/oder in einem NDB DBRM/PACKAGE enthalten sein. Die folgende Abbildung zeigt eine statische NDZ-Generierung für die Natural-Programme PROG1 und PROG2, die im SQLJ-Profil und -Package PROF1 enthalten sind, und eine statische NDB-Generierung für die Natural-Programme PROG2 und PROG4, die im Package PACK1 enthalten sind.

NDZ verwendet Java, um eine Verbindung zu Db2 herzustellen und SQL-Statements
auszuführen. Der Standard zum Einbetten von SQL-Statements in Java-Programme heißt SQLJ
und die Java-Programme, die eingebettetes SQL enthalten, werden SQLJ-Programme genannt.
NDZ bietet einen SQLJ-Generator, der temporäre Assembler-Programme, die mit dem
NDB-Kommando CMD
CREATE erzeugt werden, in SQLJ übersetzt. Der NDZ
SQLJ-Generator wird in Schritt 2 -
NDZ SLQJ Generator beschrieben.
NDZ benötigt SQLJ Serialized Profiles, um Db2-SQL-Statements aus Natural-Programmen statisch auszuführen. Serialisierte SQLJ-Profile sind Dateien, die die Beschreibung der SQL-Statements und Cursors eines bestimmten Programms enthalten. NDZ verwendet serialisierte SQLJ-Profile zur Laufzeit, daher sind sie für die statische Ausführung von Db2 mit Natural und NDZ zwingend erforderlich. Sie werden durch den SQLJ Translator erzeugt. Der SQLJ Translator wird von IBM bereitgestellt.
Der SQLJ Translator erhält ein SQLJ-Programm als Eingabe. Die Verwendung des IBM SQLJ Translator im Zusammenhang mit NDZ wird in Schritt 3 - IBM SLQJ Translator beschrieben. Weitere Informationen über den SQLJ Translator finden Sie in der IBM Db2 Java-Dokumentation für SQLJ.
Ein SQLJ-Programm kann nur dann statisch ausgeführt werden, wenn es über serialisierte SQLJ-Profile verfügt, die angepasst und an Db2 gebunden sind. NDZ bietet ein eigenes Binder- und Customizer-Programm, das den IBM SQLJ Customizer aufruft.
Der NDZ-Binder verwendet die in der NDZ-Konfigurationsdatei db2.properties angegebenen Verbindungsparameter, um die Anpassung und optional den Bindeprozess in Db2 auszuführen.
Sie können den NDZ Binder und Customizer so einstellen, dass er den Bindeprozess überspringt und stattdessen eine DBRM-Datei erzeugt, die in einem späteren Schritt an Db2 gebunden wird. Der NDZ Binder und Customizer wird in Schritt 5 - NDZ SQLJ Binder / Customizer beschrieben.
Um Natural-Programme, die Db2-Statements enthalten, statisch mit NDZ auszuführen, müssen
Sie immer ein serialisiertes SQLJ-Profil haben. Das SQLJ-Profil wird zur Laufzeit und
optional im Bindeprozess verwendet. Falls gewünscht, können Sie aus dem serialisierten
SQLJ-Profil eine DBRM-Datei erzeugen und diese Datei mit dem Db2-Kommando
BIND PACKAGE an Db2 binden. Dies ist vor allem dann sinnvoll,
wenn der im NDZ angegebene Benutzer nicht über die erforderlichen Berechtigungen zur
Ausführung des Bindeprozesses in Db2 verfügt. In diesem Fall kann die Bindung mit den
Berechtigungen des Ausführenden des BIND PACKAGE-Kommandos
durchgeführt werden, z.B. dem Benutzer, der den Batch-Job mit dem Kommando absetzt. Ein
Beispiel hierfür finden Sie in der JCL in Schritt 6.

Benutzen Sie das Kommando CMD CREATE und wählen Sie die
Natural-Programme aus, die Sie für die statische Ausführung mit NDZ vorbereiten
möchten.
Das CMD CREATE-Kommando erzeugt ein temporäres
Assembler-Programm mit den SQL-Statements, die in den ausgewählten Natural-Programmen
enthalten sind. Dieser Schritt ist für NDZ und NDB identisch. Ausführliche Informationen
über das Kommando CMD CREATE finden Sie unter Generierungsprozedur - Kommando: CMD CREATE in der
Natural for Db2-Dokumentation.
//GENERATE EXEC PGM=natural batch nucleus //CMPRMIN DD Natural parameters //* //STEPLIB DD DSN=nucleus load library,DISP=SHR //SYSUDUMP DD SYSOUT=X //********* OUTPUT DECKS //CMWKF01 DD DSN=&&TMP1,UNIT=SYSDA,DCB=(DSORG=PS,RECFM=FB,LRECL=80, // BLKSIZE=3120),DISP=(,PASS),SPACE=(TRK,(5,5)) //CMWKF02 DD DSN=&&TMP2,UNIT=SYSDA,DCB=(DSORG=PS,RECFM=FB,LRECL=80, // BLKSIZE=3120),DISP=(,PASS),SPACE=(TRK,(5,5)) //CMWKF03 DD DSN=&&TMP3,UNIT=SYSDA,DCB=(DSORG=PS,RECFM=FB,LRECL=80, // BLKSIZE=3120),DISP=(,PASS),SPACE=(TRK,(5,5)) //CMWKF04 DD DSN=&&TMP4,UNIT=SYSDA,DCB=(DSORG=PS,RECFM=FB,LRECL=80, // BLKSIZE=3120),DISP=(,PASS),SPACE=(TRK,(5,5)) //CMWKF05 DD DSN=&&TMP5,UNIT=SYSDA,DCB=(DSORG=PS,RECFM=FB,LRECL=80, // BLKSIZE=3120),DISP=(,PASS),SPACE=(TRK,(5,5)) //CMWKF06 DD DSN=&&TMP6,UNIT=SYSDA,DCB=(DSORG=PS,RECFM=FB,LRECL=80, // BLKSIZE=3120),DISP=(,PASS),SPACE=(TRK,(5,5)) //CMPRINT DD SYSOUT=X //CMSYNIN DD *,SYMBOLS=JCLONLY LOGON SYSDB2 CMD CRE DBRM PROFILE NAME USING INPUT DATA WITH XREF YES|NO FS ON/OFF LIBRARY,PROGRAM LIBRARY,PROGRAM . FIN |
Führen Sie die Java-Klasse com.softwareag.ndz.sqljgen.SQLJGenerator über
den IBM JZOS Batch Launcher aus und verwenden Sie das in Schritt 1 erzeugte
Assembler-Programm als Eingabe.
NDZ stellt die Java-Klasse com.softwareag.ndz.sqljgen.SQLJGenerator zur
Verfügung, um die in Schritt 1 erzeugten temporären Assembler-Programme in
SQLJ-Programme zu übersetzen. Die Java-Klasse muss über den IBM JZOS Batch Launcher
ausgeführt werden. Der IBM JZOS Batch Launcher ist mit jeder vom NDZ unterstützten
Java-Version für z/OS verfügbar.
| DD-Name | Beschreibung |
|---|---|
INPUT |
Temporäres Assembler-Program, generiert in Schritt 1. |
OUTPUT |
SQL-Program, übersetzt aus dem Input. |
//GENSQLJ EXEC PROC=JVMPRC86|11|17|xx,REGSIZE=1024M, // JAVACLS='com.softwareag.ndz.sqljgen.SQLJGenerator' //INPUT DD DSN=&&TMP6,DISP=(OLD,PASS) //OUTPUT DD PATH='programs directory/program name.sqlj', // PATHDISP=(KEEP,DELETE), // PATHOPTS=(OCREAT,ORDWR), // PATHMODE=(SIRUSR,SIWUSR, // SIRGRP,SIWGRP, // SIROTH,SIWOTH), // FILEDATA=TEXT //MAINARGS DD *,SYMBOLS=JCLONLY &PROFILE //STDENV DD *,SYMBOLS=JCLONLY . /etc/profile . ndz installation path/bin/setenv.sh /* |
Führen Sie die Java-Klasse sqlj.tools.Sqlj über den IBM JZOS Batch
Launcher aus und verwenden Sie das in Schritt 2 übersetzte SQL-Programm als Eingabe.
Die Java-Klasse sqlj.tools.Sqlj wird mit dem IBM JDBC/SQLJ-Treiber für Db2
für z/OS bereitgestellt. Der IBM SQLJ Translator hat eine ähnliche Funktion wie ein Db2
Pre-Compiler für Assembler oder COBOL. Der Translator ermöglicht es, die eingebetteten
SQL-Statements in einem Programm statisch mit Db2 auszuführen.
Der Hauptunterschied besteht darin, dass der SQLJ Translator sowohl ein serialisiertes Profil als auch eine modifizierte Version des Eingabeprogramms als Ausgabe erzeugt. Ein weiterer wichtiger Unterschied ist, dass der IBM SQLJ Translator keine DBRM-Datei erzeugt. Einzelheiten zum IBM SQLJ Translator finden Sie in der Dokumentation IBM Db2 Application Programming and Reference for Java.
//GENPROF EXEC PROC=JVMPRC86|11|17|xx,REGSIZE=1024M, // JAVACLS='sqlj.tools.Sqlj' //MAINARGS DD *,SYMBOLS=JCLONLY -compile=true -d=profiles directory programs directory/program name.sqlj //STDENV DD *,SYMBOLS=JCLONLY . /etc/profile . ndz installation path/bin/setenv.sh /* |
Führen Sie das Kommando CMD MODIFYZ aus, um die
Natural-Objekte aus Schritt 1 mit den in Schritt 3 generierten Informationen zu
aktualisieren.
Der Aktualisierungsvorgang schreibt den Namen des serialisierten SQLJ-Profils und die Folgenummern des SQL-Statements in die Natural-Objekte.
Weitere Einzelheiten zum Kommando CMD MODIFYZ finden Sie
unter Änderungsprozedur - Kommando: CMD MODIFYZ in der
Natural for Db2-Dokumentation.
//MODIFYZ EXEC PGM=natural batch nucleus, // REGION=3000K //CMPRMIN DD * Natural parameters /* //* //STEPLIB DD DSN=nucleus load library,DISP=SHR //********* OUTPUT DECKS //CMWKF01 DD DSN=&&TMP6,DISP=(OLD,DELETE) //CMWKF02 DD DSN=&&TMP22,UNIT=SYSDA,DCB=(DSORG=PS,RECFM=FB,LRECL=80, // BLKSIZE=3120),DISP=(,PASS),SPACE=(TRK,(5,5)) //CMPRINT DD SYSOUT=X //CMSYNIN DD *,SYMBOLS=JCLONLY LOGON SYSDB2 CMD MODIFYZ XREF YES|NO FIN |
Führen Sie die Java-Klasse com.softwareag.ndz.sqljbinder.Main über den IBM
JZOS Batch Launcher aus, um das in Schritt 3 generierte serialisierte Profil anzupassen
und optional den Db2-Bind auszuführen.
NDZ bietet die Java-Klasse com.softwareag.ndz.sqljbinder.Main mit den
folgenden Optionen an:
| Option | Argument | Pflichtangabe | Beschreibung |
|---|---|---|---|
-url |
URL der Db2-Verbindung im Format
jdbc:db2://server:port/database
|
Nein | Die URL-Verbindung zu einer Db2-Serverinstanz. Wenn diese Option nicht
angegeben wird, werden stattdessen die in der Konfigurationsdatei
db2.properties verfügbaren Verbindungsparameter
verwendet. Wenn diese Option angegeben wird, müssen auch die Optionen
-user und -password angegeben werden.
|
-user |
Benutzerkennung der Db2-Verbindung | Nein | Die Verbindungsbenutzerkennung zur Authentifizierung bei einer
Db2-Serverinstanz. Wenn diese Option nicht angegeben wird, wird stattdessen der
in der Konfigurationsdatei db2.properties angegebene
Benutzer verwendet. Wenn diese Option angegeben wird, müssen auch die Optionen
-url und -password angegeben werden.
|
-password |
Passwort der Db2-Verbindung | Nein | Das Verbindungsbenutzerpasswort zur Authentifizierung bei einer
Db2-Serverinstanz. Wenn diese Option nicht angegeben wird, wird stattdessen das
verschlüsselte Passwort oder das in der Konfigurationsdatei
db2.properties angegebene Passwort verwendet. Wenn diese
Option angegeben wird, müssen auch die Optionen -url und
-user angegeben werden.
|
-automaticbind |
YES | NO | Nein | Gibt an, ob die Bindung nach der Anpassung ausgeführt werden soll oder
nicht.
Wenn sie auf Diese Option wird als |
-genDBRM |
- | Nein | Gibt an, ob die Klasse nach der Ausführung eine DBRM-Datei erzeugt. Wenn
diese Option angegeben wird, muss auch die Option -DBRMDir
angegeben werden.
|
-DBRMDir |
DBRM-Dateiverzeichnis | Nein | Unix System Services-Verzeichnis, in dem die aus dem serialisierten Profil
generierte DBRM-Datei gespeichert wird, wenn die Option -genDBRM
angegeben ist. Der generierte DBRM-Dateiname ist der im Parameter
-profile angegebene Wert. Diese Option muss angegeben werden,
wenn die Option -genDBRM angegeben wird.
|
-bindoptions |
Db2-Bind-Optionen | Ja | Die Bindeoptionen, die verwendet werden, um das serialisierte Profil an Db2
zu binden. Der Isolation Level (ISOLATION CS | RS | RR | UR | NC)
muss immer angegeben werden. Wenn die Option -automaticbind auf
YES gesetzt ist, können Sie weitere Bindungsoptionen
angeben.
|
-profile |
Name des serialisierten Profils | Ja |
Name des Profils, das in dem in der Eigenschaft
ndz.staticPath der Eigenschaftsdatei
ndz.properties angegebenen Verzeichnis erzeugt wird.
Der Name der generierten Profildatei hat das Format
|
-collection |
Name der Db2 Collection | Nein | Die Collection, zu der die im Bindeprozess erzeugten Pakete hinzugefügt werden sollen. |
-staticpositioned |
YES | NO | Nein | Gibt an, ob Positioned Update-Statements statisch oder dynamisch ausgeführt
werden sollen. Wir empfehlen Ihnen, diese Option auf YES zu
setzen.
|
-onlinecheck |
YES | NO | Nein | Gibt an, ob die Online-Prüfung von Datentypen gegen die in der Datei
db2.properties oder in der Option -url
angegebene Db2-Instanz durchgeführt wird.
Wir empfehlen Ihnen, diese Option
auf YES
gesetzt ist, muss der Benutzer die Berechtigung haben, die Statements, die
angepasst werden, auszuführen.
Diese Option wird auch dann als
|
-pkgversion |
AUTO | Versionskennung | Nein | Gibt an, welche Package-Version bei der Bindung von Packages an den Server für das serialisierte Profil, das angepasst wird, verwendet wird. Wenn dieser Parameter nicht angegeben wird, wird keine Version verwendet. |
-qualifier |
Qualifier-Name | Nein | Gibt den Qualifier an, der für nicht-qualifizierte Objekte im SQLJ-Programm
während der Online-Prüfung verwendet werden soll, wenn die Option
-onlinecheck auf YES gesetzt ist.
|
Wenn die Option -automaticbind auf YES gesetzt ist, bindet
die Klasse das serialisierte Profil an Db2 unter Verwendung der in der
NDZ-Konfigurationsdatei db2.properties angegebenen
Verbindungsparameter, sofern nicht die Eigenschaften -url,
-user und -password angegeben sind. In jedem Fall muss der
Benutzer über die Rechte eines SYSADM oder DBADM verfügen. Wenn das Paket nicht
existiert, muss der Benutzer außerdem die BINDADD-Berechtigung sowie entweder die
CREATEIN- oder die PACKADM-Berechtigung für die Collection oder alle Collections haben.
Wenn das Package existiert, muss der Benutzer die BIND-Berechtigung für das Package
haben.
Wenn die Option -automaticbind auf NO gesetzt ist und die
Optionen -genDBRM und -DBRMDir angegeben sind, führt die
Klasse die Bindung des serialisierten Profils an Db2 nicht aus. Stattdessen erzeugt die
Klasse eine DBRM-Datei in dem mit der Option -DBRMDir angegebenen
Verzeichnis. Sie können die DBRM-Datei in ein Dataset kopieren und es an Db2 binden,
indem Sie das Db2-Kommando BIND PACKAGE auf die gleiche Weise
wie bei NDB ausführen. Weitere Informationen über das Db2-Kommando BIND
PACKAGE finden Sie in der IBM Db2 for z/OS SQL
Reference-Dokumenation.
Wenn die Option -onlinecheck auf YES gesetzt ist, muss der in
der Eigenschaftsdatei db2.properties angegebene Benutzer oder der
im Parameter -user angegebene Benutzer Zugriff haben, um die im angepassten
SQLJ-Programm enthaltenen Statements auszuführen.
JCL Example //CUSTOM EXEC PROC= JVMPRC86|11|17|xx,REGSIZE=1024M, // JAVACLS='com.softwareag.ndz.sqljbinder.Main' //MAINARGS DD * -profile profile name -onlinecheck YES|NO -staticpositioned YES|NO -collection collection -bindoptions ISOLATION CS|RS|RR|UR|NC -automaticbind YES|NO -genDBRM -DBRMDir DBRM directory //STDENV DD *,SYMBOLS=JCLONLY . /etc/profile . ndz installation path/bin/setenv.sh /* |
Binden Sie die in Schritt 5 erzeugte DBRM-Datei an Db2, indem Sie das Db2-Kommando
BIND PACKAGE verwenden.
Dieser Schritt muss nur ausgeführt werden, wenn sowohl -automaticbind auf
NO gesetzt ist als auch -genDBRM in Schritt 5 angegeben
wurde. Weitere Informationen über das Db2-Kommando BIND
PACKAGE finden Sie in der IBM
Db2-Dokumentation.
//BIND EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=4096K //STEPLIB DD DSN=Db2 high level qualifier.SDSNLOAD,DISP=SHR //DBRMLIB DD DSN=DBRM Dataset,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSTSIN DD *,SYMBOLS=JCLONLY DSN SYSTEM(DB2 SSID) BIND PACKAGE(COLLECTION) - MEM(DBRM NAME) - Other bind options - END /* |
Einige der statischen Vorbereitungsschritte können mit z/OS Unix System Services Shell-Skripten durchgeführt werden. Das NDZ bietet die folgenden Skripte im Unterverzeichnis bin:
Syntax:
ndz-generate-profile.sh program name
Dabei ist program name der SQLJ-Programmname.
Syntax:
ndz-binder.sh parameters
Dabei sind parameters Parameter der NDZ Binder / Customizer.
Dieses Skript führt eine IBM Db2 Utility zum Drucken eines SQLJ-Profils aus. Weitere Informationen siehe IBM Db2 Dokumentation für Java / SQLJ.
Syntax:
ndz-print-profile.sh profile name
Dabei ist profile name ein zuvor erstelltes und in dem in der Konfigurationsdatei ndz.properties definierten NDZ-Verzeichnis für statische Profile gespeichertes SQLJ-Profil.
In der folgenden Tabelle werden die verschiedenen Schritte der statischen Generierung mit NDZ und NDB verglichen.
| Step # | NDZ | NDB |
|---|---|---|
| Schritt 1 | CMD CREATE – generiere ein temporäres
SQL-Assembler-Programm mit CMD CREATE DBRM.
|
GENERATE/GENERATION – generiert ein temporäres
SQL-Assembler-Programm mit CMD CREATE DBRM.
|
| Schritt 2 | NDZ SQLJ Generator – generiert ein temporäres SQLJ-Programm. | Dieser Schritt wird bei der statischen NDB-Generierung ausgelassen. |
| Schritt 3 | IBM SQLJ Translator – generiert das SQLJ-Profil. | PC – Db2 prekompiliert das SQL-Assembler-Programm. |
| Schritt 4 | CMD MODIFYZ – ändere die Natural-Programme mit den
SQLJ-Profilnummern und SQLJ-Folgenummern mit CMD MODIFYZ.
|
MODIFY – ändert die Natural-Programme mit dem DB2
DBRM-Namen und den Abschnitts- und Statement-Nummern mit CMD
MODIFY.
|
| Schritt 5 | NDZ SQLJ Binder / Customizer – platziere statische SQL-Informationen in DB2
zum BIND PACKAGE oder, optional, generiere eine DBRM-Datei, die in
Schritt 6 verwendet werden kann.
|
BIND – platziert statische SQL-Informationen in DB2
zum BIND PACKAGE.
|
| Schritt 6 (optional) | Db2 BIND - platziere statische SQL-Informationen in DB2 zum BIND
PACKAGE, wenn der Bindungsvorgang nicht in Schritt 5 erfolgt ist.
|