Es stehen mehrere Natural- und Nicht-Natural-Subprogramme zur Verfügung, die Ihnen interne Informationen aus Natural for Db2 liefern oder spezifische Funktionen bereitstellen, für die es kein entsprechendes Natural-Statement gibt.
In diesem Kapitel werden die folgenden Themen behandelt:
Die folgenden Natural-Subprogramme sind verfügbar:
| Subprogramm | Funktion |
|---|---|
NDBCONV |
Setzt den Conversational Mode 2 und setzt ihn zurück. |
NDBDBRM |
Prüft, ob ein Natural-Programm SQL-Zugriffe enthält und ob es für die statische Ausführung modifiziert wurde. |
NDBDBR2 |
Prüft, ob ein Natural-Programm SQL-Zugriffe enthält und ob es für die statische Ausführung modifiziert wurde. |
NDBDBR3 |
Prüft, ob ein Natural-Programm SQL-Zugriffe enthält, ob es für die statische Ausführung modifiziert wurde und ob es als statisch generiert werden kann. |
NDBDBRZ |
Prüft, ob ein Natural-Programm SQL-Zugriffe enthält, ob es für die statische NDZ-Ausführung modifiziert wurde und ob es als statisch generiert werden kann. |
NDBERR |
Liefert Diagnoseinformationen über den zuletzt ausgeführten SQL-Aufruf. |
NDBISQL |
Führt SQL-Statements im dynamischen Modus aus. |
NDBISQLD |
Führt SQL-Statements im dynamischen Modus unter Verwendung dynamischer Variablen aus. |
NDBNOERR |
Unterdrückt die normale Natural-Fehlerbehandlung. |
NDBNROW |
Ermittelt die Anzahl der Zeilen, die von einem Natural SQL-Statement betroffen sind. |
NDBSTMP |
Stellt eine Db2-TIMESTAMP-Spalte als alphanumerisches Feld zur
Verfügung und umgekehrt.
|
Die oben genannten Subprogramme sind alle in der Natural Library SYSDB2 und in der Natural Library SYSTEM in der Systemdatei FNAT enthalten.
Darüber hinaus enthält die Natural Library SYSTEM in der Systemdatei FNAT das Subprogramm
DBTLIB2N und die Subroutine DBDL219S. Sie werden von
NDBDBRM und NDBDBR2 verwendet. Die entsprechenden Parameter
müssen in einem DEFINE DATA-Statement definiert werden.
Die Natural-Subprogramme NDBDBRM, NDBDBR2 und
NDBDBR3 gestatten die optionale Angabe der Datenbankkennung, der
Dateinummer, des Passworts und des Chiffriercodes der Library-Datei, die das zu
untersuchende Programm enthält.
Werden diese Parameter nicht angegeben, wird entweder die aktuelle FNAT-Datei oder die FUSER-Datei verwendet, um das zu untersuchende Programm zu finden, je nachdem, ob der Library-Name mit "SYS" beginnt oder nicht.
Programme, die NDBDBRM, NDBDBR2 oder NDBDBR3 ohne
diese Parameter aufrufen, funktionieren ebenfalls wie vor dieser Änderung, da die
hinzugefügten Parameter als optional deklariert sind.
Ausführliche Informationen zu diesen Subprogrammen finden Sie unter den in der obigen
Tabelle enthaltenen Links und in der Beschreibung des Aufrufformats und der Parameter in
dem mit dem Subprogramm gelieferten Textobjekt
(subprogram-nameT).
Natural-Subprogramme werden mit dem Natural-Statement CALLNAT aufgerufen.
Nicht-Natural-Subprogramme werden mit dem Natural-Statement CALL aufgerufen.
Das Natural-Subprogramm NDBCONV wird verwendet, um den Conversational Mode 2
in CICS-Umgebungen entweder zu setzen oder zurückzusetzen. Der Conversational Mode 2
bedeutet, dass Aktualisierungstransaktionen über Terminal-E/A erzeugt werden, bis entweder
ein COMMIT oder ROLLBACK ausgegeben wurde (Achtung: Db2- und
CICS-Ressourcen werden über Terminal-E/A gehalten!). Das bedeutet, dass der Conversational
Mode 2 die gleiche Wirkung hat wie der Natural-Profilparameter PSEUDO=OFF, mit dem Unterschied, dass
der Conversational Mode nach einem Db2-Aktualisierungs-Statement (UPDATE,
DELETE, INSERT) aufgenommen und nach einem COMMIT
oder ROLLBACK wieder verlassen wird, während PSEUDO=OFF den
Conversational Mode für die gesamte Natural-Sitzung bewirkt.
Ein Beispielprogramm namens CALLCONV wird in der Library SYSDB2 zur
Verfügung gestellt. Es demonstriert, wie man NDBCONV aufruft. Eine
Beschreibung des Aufrufformats und der Parameter finden Sie in dem Textobjekt
NDBCONVT.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBCONV' #CONVERS #RESPONSE
Die verschiedenen Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung |
|---|---|---|
#CONVERS |
I1 | Enthält den gewünschten Conversational Mode (Eingabe) |
#RESPONSE |
I4 | Enthält die Rückmeldung von NDBCONV (Ausgabe)
|
Der Parameter #CONVERS kann die folgenden Werte enthalten:
| Code | Erläuterung |
|---|---|
0 |
Der Conversational Mode 2 muss zurückgesetzt werden. |
1 |
Der Conversational Mode 2 muss gesetzt werden. |
Der Parameter #RESPONSE kann die folgenden Werte enthalten:
| Code | Erläuterung |
|---|---|
0 |
Der Conversational Mode 2 wurde erfolgreich gesetzt oder zurückgesetzt. |
-1 |
Der angegebene Wert von #CONVERS ist ungültig, der
Conversational Mode wurde nicht geändert.
|
-2 |
NDBCONV wird in einer Umgebung aufgerufen, die keine
CICS-Umgebung ist und in der der Conversational Mode 2 nicht unterstützt
wird.
|
Das Natural-Subprogramm NDBDBRM wird verwendet, um zu prüfen, ob ein
Natural-Programm SQL-Zugriffe enthält und ob es für die statische Ausführung modifiziert
wurde. Es wird außerdem verwendet, um den entsprechenden DBRM-Namen
(Datenbankanforderungsmodul) aus dem Header eines als statisch generierten
Natural-Programms zu ermitteln (siehe auch Programme für die statische Ausführung vorbereiten
vorbereiten).
Das Installationsmedium enthält ein Beispielprogramm namens CALLDBRM, das
den Aufruf von NDBDBRM demonstriert. Eine Beschreibung des Aufrufformats und
der Parameter finden Sie in dem Textobjekt NDBDBRMT.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBDBRM' #LIB #MEM #DBRM #RESP #DBID #FILENR #PASSWORD #CIPHER
Die verschiedenen Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung |
|---|---|---|
#LIB |
A8 | Enthält den Namen der Library des zu prüfenden Programms. |
#MEM |
A8 | Enthält den Namen des zu prüfenden Programms (Member). |
#DBRM |
A8 | Gibt den DBRM-Namen zurück. |
#RESP |
I2 | Gibt einen Rückmeldecode zurück. Die möglichen Codes sind unten aufgeführt. |
#DBID |
N5 | Optional. Datenbankkennung der Library-Datei. |
#FILENR |
N5 | Optional. Dateinummer der Library-Datei. |
#PASSWORD |
A8 | Optional. Passwort der Library-Datei. |
#CIPHER |
N8 | Optional. Chiffrierschlüssel der Library-Datei. |
Der Parameter #RESP kann die folgenden Werte enthalten:
| Code | Erläuterung |
|---|---|
0 |
Das Member #MEM in der Library #LIB hat
SQL-Zugriff; es ist statisch, wenn #DBRM einen Wert enthält.
|
-1 |
Das Member #MEM in der Library #LIB hat keinen
SQL-Zugriff.
|
-2 |
Das Member #MEM in der Library #LIB existiert
nicht.
|
-3 |
Es wurde kein Library-Name angegeben. |
-4 |
wurde kein Member-Name angegeben. |
-5 |
Der Library-Name muss mit einem Buchstaben beginnen. |
>-5 |
Weitere negative Rückmeldecodes entsprechen den Fehlernummern der Natural-Fehlermeldungen. |
>0 |
Positive Rückmeldecodes entsprechen Fehlernummern von Natural Security-Meldungen. |
Das Natural-Subprogramm NDBDBR2 dient dazu, zu prüfen, ob ein
Natural-Programm SQL-Zugriffe enthält und ob es für die statische Ausführung modifiziert
wurde. Außerdem ermittelt es aus dem Header eines statisch generierten Natural-Programms
den entsprechenden DBRM-Namen (Datenbankanforderungsmodul) (siehe auch Programme für die statische Ausführung
vorbereiten) und den vom Precompiler generierten Zeitstempel.
Das Installationsmedium enthält ein Beispielprogramm namens CALLDBR2, das
den Aufruf von NDBDBR2 demonstriert. Eine Beschreibung des Aufrufformats und
der Parameter finden Sie im Textobjekt NDBDBR2T.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBDBR2' #LIB #MEM #DBRM #TIMESTAMP #PCUSER #PCRELLEV #ISOLLEVL #DATEFORM #TIMEFORM #RESP #DBID #FILENR #PASSWORD #CIPHER
Die verschiedenen Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung |
|---|---|---|
#LIB |
A8 | Enthält den Namen der Library des zu prüfenden Programms. |
#MEM |
A8 | Enthält den Namen des zu prüfenden Programms (Member). |
#DBRM |
A8 | Gibt den DBRM-Namen zurück. |
#TIMESTAMP |
B8 | Vom Precompiler erzeugtes Konsistenz-Token. |
#PCUSER |
A8 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#PCRELLEV |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#ISOLLEVL |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#DATEFORM |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#TIMEFORM |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#RESP |
I2 | Gibt einen Rückmeldecode zurück. Die möglichen Codes sind unten aufgeführt. |
#DBID |
N5 | Optional. Datenbankkennung der Library-Datei. |
#FILENR |
N5 | Optional. Dateinummer der Library-Datei. |
#PASSWORD |
A8 | Optional. Passwort der Library-Datei. |
#CIPHER |
N8 | Optional. Chiffriercode der Library-Datei. |
Der Parameter #RESP kann die folgenden Werte enthalten:
| Code | Erläuterung |
|---|---|
0 |
Das Member #MEM in der Library #LIB hat
SQL-Zugriff. Es ist statisch, wenn #DBRM einen Wert enthält.
|
-1 |
Das Member #MEM in der Library #LIB hat keinen
SQL-Zugriff.
|
-2 |
Das Member #MEM in der Library #LIB existiert
nicht.
|
-3 |
Es wurde kein Library-Name angegeben. |
-4 |
Es wurde kein Member-Name angegeben. |
-5 |
Der Library-Name muss mit einem Buchstaben beginnen. |
>-5 |
Weitere negative Rückmeldeecodes entsprechen den Fehlernummern der Natural-Fehlermeldungen. |
>0 |
Positive Rückmeldeecodes entsprechen Fehlernummern von Natural Security-Meldungen. |
Mit dem Natural-Subprogramm NDBDBR3 kann geprüft werden, ob ein
Natural-Programm SQL-Zugriffe enthält (#RESP 0), ob das Natural-Programm
ausschließlich SQL-Statements enthält, die dynamisch ausführbar sind (#RESP
0, #DBRM '*DYNAMIC') und ob es für die statische Ausführung
modifiziert wurde (#RESP 0, #DBRM
dbrmname). Es wird außerdem verwendet, um den
entsprechenden DBRM-Namen (Datenbankanforderungsmodul) aus dem Header eines als statisch
generierten Natural-Programms (siehe auch Programme für die statische Ausführung vorbereiten) und
den vom Precompiler generierten Zeitstempel zu erhalten.
Auf dem Installationsmedium befindet sich ein Beispielprogramm namens
CALLDBR3, das den Aufruf von NDBDBR3 demonstriert. Eine
Beschreibung des Aufrufformats und der Parameter finden Sie im Textobjekt
NDBDBR3T.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBDBR3' #LIB #MEM #DBRM #TIMESTAMP #PCUSER #PCRELLEV #ISOLLEVL #DATEFORM #TIMEFORM #RESP #DBID #FILENR #PASSWORD #CIPHER
Die verschiedenen Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung |
|---|---|---|
#LIB |
A8 | Enthält den Namen der Library des zu prüfenden Programms. |
#MEM |
A8 | Enthält den Namen des zu prüfenden Programms (Member). |
#DBRM |
A8 | Gibt den DBRM-Namen zurück.
|
#TIMESTAMP |
B8 | Vom Precompiler erzeugtes Konsistenz-Token. |
#PCUSER |
A8 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#PCRELLEV |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#ISOLLEVL |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#DATEFORM |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#TIMEFORM |
A1 | Nicht unterstützter Parameter. Wird nur aus Kompatibilitätsgründen beibehalten. |
#RESP |
I2 | Gibt einen Rückgabecode zurück. Die möglichen Codes sind unten aufgeführt. |
#DBID |
N5 | Optional. Datenbankkennung der Library-Datei. |
#FILENR |
N5 | Optional. Dateinummer der Library-Datei. |
#PASSWORD |
A8 | Optional. Passwort der Library-Datei. |
#CIPHER |
N8 | Optional. Chiffrierschlüssel der Library-Datei. |
Der Parameter #RESP kann die folgenden Werte enthalten:
| Code | Erläuterung |
|---|---|
0 |
Das Member #MEM in der Library #LIB hat
SQL-Zugriff. Es ist statisch, wenn #DBRM einen anderen Wert als
Leerschritt (Space) und *DYNAMIC enthält.
|
-1 |
Das Member #MEM in der Library #LIB hat keinen
SQL-Zugriff.
|
-2 |
Das Member #MEM in der Library #LIB existiert
nicht.
|
-3 |
Es wurde kein Library-Name angegeben. |
-4 |
Es wurde kein Member-Name angegeben. |
-5 |
Der Library-Name muss mit einem Buchstaben beginnen. |
>-5 |
Weitere negative Rückmeldecodes entsprechen den Fehlernummern der Natural-Fehlermeldungen. |
>0 |
Positive Rückmeldecodes entsprechen Fehlernummern von Natural Security-Meldungen. |
Mit dem Natural- Subprogramm NDBDBRZ wird geprüft, ob ein Natural-Programm
SQL-Zugriffe enthält (#RESP 0), ob das Natural-Programm ausschließlich
SQL-Anweisungen enthält, die dynamisch ausführbar sind (#RESP 0,
#SQLJPROF ‘*DYNAMIC’) und ob es für die statische Ausführung im NDZ
modifiziert wurde (#RESP 0, #SQLJPROF SQLJ profile
name). Es wird ausserdem verwendet, um den entsprechenden
SQLJ-Profilnamen aus dem Header eines als statisch generierten Natural-Programms zu
erhalten (siehe auch Programme für die
statische Ausführung vorbereiten).
Auf dem Installationsmedium befindet sich ein Beispielprogramm namens
CALLDBRZ, das den Aufruf von NDBDBRZ demonstriert. Eine
Beschreibung des Aufrufformats und der Parameter ist im Textobjekt NDBDBRZT
enthalten.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBDBRZ' #LIB #MEM #SQLJPROF #RESP #DBID #FILENR #PASSWORD #CIPHER
Die Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung |
|---|---|---|
#LIB |
A8 | Enthält den Namen der Bibliothek des zu prüfenden Programms. |
#MEM |
A8 | Enthält den Namen des zu prüfenden Programms (Member). |
#SQLJPROF |
A8 | Gibt den SQLJ-Profilnamen zurück.
|
#RESP |
I2 | Gibt einen Rückmeldecode zurück. Die möglichen Codes sind unten aufgeführt. |
#DBID |
N5 | Optional. Datenbankkennung der Bibliotheksdatei. |
#FILENR |
N5 | Optional. Dateinummer der Bibliotheksdatei. |
#PASSWORD |
A8 | Optional. Passwort der Bibliotheksdatei. |
#CIPHER |
N8 | Optional. Chiffrierschlüssel der Bibliotheksdatei. |
Der Parameter #RESP kann die folgenden Werte enthalten:
| Code | Erläuterung |
|---|---|
0 |
Das Member #MEM in der Bibliothek #LIB hat
SQL-Zugriff. Es ist statisch, wenn #DBRM einen anderen Wert als
Leerzeichen und *DYNAMIC enthält.
|
-1 |
Das Member #MEM in der Bibliothek #LIB hat keinen
SQL-Zugriff.
|
-2 |
Das Member #MEM in der Bibliothek #LIB existiert
nicht.
|
-3 |
Es wurde kein Bibliotheksname angegeben. |
-4 |
Es wurde kein Member-Name angegeben. |
-5 |
Der Bibliotheksname muss mit einem Buchstaben beginnen. |
>-5 |
Weitere negative Rückmeldecodes entsprechen den Fehlernummern der Natural-Fehlermeldungen. |
>0 |
Positive Rückmeldecodes entsprechen Fehlernummern von Natural Security-Meldungen. |
Das Natural-Subprogramm NDBERR ersetzt die Funktion E der
DB2SERV-Schnittstelle, die zwar noch vorhanden, aber nicht mehr
dokumentiert ist. Es liefert Diagnoseinformationen über den letzten SQL-Aufruf. Es gibt
auch den Datenbanktyp zurück, bei dem der Fehler aufgetreten ist. NDBERR wird
typischerweise aufgerufen, wenn ein Datenbankaufruf einen SQLCODE ungleich Null zurückgibt
(was einen Fehler NAT3700 bedeutet).
Ein Beispielprogramm namens CALLERR wird auf dem Installationsmedium
mitgeliefert. Es demonstriert, wie NDBERR aufgerufen werden kann. Eine
Beschreibung des Aufrufformats und der Parameter finden Sie im Textobjekt
NDBERRT.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBERR' #SQLCODE #SQLSTATE #SQLCA #DBTYPE
Die verschiedenen Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung |
|---|---|---|
#SQLCODE |
I4 | Gibt den SQL-Rückgabecode zurück. |
#SQLSTATE |
A5 | Gibt einen Rückgabecode für die Ausgabe des zuletzt ausgeführten SQL-Statements zurück. |
#SQLCA |
A136 | Gibt den SQL-Kommunikationsbereich des letzten Db2-Zugriffs zurück. |
#DBTYPE |
B1 | Gibt die Kennung (im Hexadezimalformat) für die aktuell verwendete Datenbank
zurück (wobei X'02' für Db2 steht).
|
Das Natural-Subprogramm NDBISQL dient dazu, SQL-Statements im dynamischen
Modus auszuführen. Das SELECT-Statement und alle SQL-Statements, die
dynamisch vorbereitet werden können (gemäß der Db2-Literatur von IBM), können an
NDBISQL übergeben werden.
Auf dem Installationsmedium befindet sich ein Beispielprogramm namens CALLISQL, das den
Aufruf von NDBISQL demonstriert. Eine Beschreibung des Aufrufformats und der
Parameter ist im Textobjekt NDBISQLT enthalten.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBISQL'#FUNCTION #TEXT-LEN #TEXT (*) #SQLCA #RESPONSE #WORK-LEN #WORK (*)
Die verschiedenen Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung | |
|---|---|---|---|
#FUNCTION |
A8 | Gültige Funktionen, siehe unten. | |
#TEXT-LEN |
I2 | Länge des SQL-Statements oder des Puffers für den Rückgabebereich. | |
#TEXT |
A1(1:V) | Enthält das SQL-Statement (EXECUTE)
oder empfängt eine Datenzeile (FETCH).
|
|
#SQLCA |
A136 | Enthält die SQLCA. | |
#RESPONSE |
I4 | Gibt einen Rückmeldecode zurück. | |
#WORK-LEN |
I2 | Länge des durch #WORK angegebenen
Arbeitsbereiches (optional).
|
|
#WORK |
A1(1:V) | Arbeitsbereich zur Aufnahme von SQLDA/SQLVAR und Hilfsfeldern bei Aufrufen (optional). | |
#DBTYPE |
I2 | Datenbanktyp (optional). | |
0 |
Voreinstellung | ||
2 |
DB2 | ||
4 |
CNX | ||
Gültige Funktionen für den Parameter #FUNCTION sind:
| Function | Parameter | Erläuterung |
|---|---|---|
CLOSE |
Schließt den Cursor für das SELECT-Statement.
|
|
EXECUTE |
#TEXT-LEN |
Führt das SQL-Statement aus. |
FETCH |
#TEXT-LEN |
Gibt einen Datensatz aus dem |
TITLE |
|
Gibt die Kopfzeile für das |
Der Parameter #RESPONSE kann die folgenden Rückmeldecodes enthalten:
| Code | Funktion | Erläuterung |
|---|---|---|
5 |
EXECUTE |
Das Statement ist ein SELECT-Statement.
|
6 |
TITLE, FETCH |
Die Daten werden abgeschnitten; nur beim ersten Aufruf von TITLE
oder FETCH gesetzt.
|
100 |
FETCH |
Kein Datensatz / Ende der Daten. |
-2 |
Nicht unterstützter Datentyp (z.B. GRAPHIC).
|
|
-3 |
TITLE, FETCH |
Kein Cursor geöffnet; |
-4 |
Zu viele Spalten in der Ergebnistabelle. | |
-5 |
SQLCODE vom Aufruf. | |
-6 |
Keine Versionsübereinstimmung. | |
-7 |
Ungültige Funktion. | |
-8 |
Fehler beim SQL-Aufruf. | |
-9 |
Arbeitsbereich ungültig (möglicherweise Relokation). | |
-10 |
Schnittstelle nicht verfügbar. | |
-11 |
EXECUTE |
Die ersten beiden Bytes des Statements sind nicht leer. |
Der erste Aufruf muss ein EXECUTE-Aufruf sein. NDBISQL hat
einen festen SQLDA AREA, der Platz für 50 Spalten bietet. Wenn dieser Bereich für ein
bestimmtes SELECT zu klein ist, ist es möglich, einen optionalen
Arbeitsbereich bei den Aufrufen von NDBISQL durch Angabe von
#WORK-LEN (I2) und #WORK(A1/1:V) bereitzustellen.
Dieser Arbeitsbereich wird verwendet, um die SQLDA und temporäre Arbeitsfelder wie
Null-Indikatoren und Hilfsfelder für numerische Spalten aufzunehmen. Kalkulieren Sie 16
Bytes für den SQLDA-Kopf und 44 Bytes für jede Ergebnisspalte sowie 2 Bytes Null-Indikator
für jede Spalte und Platz für jede numerische Spalte, wenn Sie #WORK-LEN und
#WORK(*) bei NDBISQL-Aufrufen angeben. Wenn diese optionalen
Parameter bei einem EXECUTE-Aufruf angegeben werden, müssen sie auch bei
jedem folgenden Aufruf angegeben werden.
Handelt es sich bei dem Statement um ein SELECT-Statement (d.h. es wird der Rückmeldecode 5
zurückgegeben), kann eine beliebige Folge von TITLE- und
FETCH-Aufrufen verwendet werden, um die Daten abzurufen. Ein Rückmeldecode
von 100 zeigt das Ende der Daten an.
Der Cursor muss mit einem CLOSE-Aufruf geschlossen werden.
Der Funktionscode EXECUTE schließt implizit einen Cursor, der durch einen
vorherigen EXECUTE-Aufruf für ein SELECT-Statement geöffnet
wurde.
In TP-Umgebungen kann zwischen einem EXECUTE-Aufruf und einem
TITLE-, FETCH- oder CLOSE-Aufruf, der sich auf
dasselbe Statement bezieht, keine Terminal-E/A durchgeführt werden.
Das Natural-Subprogramm NDBISQLD dient dazu, SQL-Statements im dynamischen
Modus auszuführen. Das SELECT-Statement und alle SQL-Statements, die
dynamisch vorbereitet werden können (gemäß der Db2-Literatur von IBM), können an
NDBISQLD übergeben werden.
Ein Beispielprogramm namens CALISQLD ist im Lieferumfang des
Installationsmediums enthalten. Es demonstriert, wie man NDBISQLD aufruft.
Eine Beschreibung des Aufrufformats und der Parameter ist im Textobjekt
ISQLDT enthalten.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBISQLD'#FUNCTION #TEXT #SQLCA #RESPONSE #WORK #DBTYPE
Die verschiedenen Parameter sind in der folgenden Tabelle beschrieben:
| Parameter | Format/Länge | Erläuterung | |
|---|---|---|---|
#FUNCTION |
A8 | Gültige Funktionen, siehe unten. | |
#TEXT |
A DYNAMIC | Enthält das SQL-Statement (EXECUTE)
oder empfängt die Datenzeile (FETCH).
|
|
#SQLCA |
A136 | Enthält die SQLCA. | |
#RESPONSE |
I4 | Gibt einen Rückmeldecode zurück. | |
#WORK |
A DYNAMIC | Arbeitsbereich, um SQLDA/SQLVAR und Hilfsfelder
über Aufrufe hinweg zu halten (optional).
Wenn angegeben, muss
|
|
#DBTYPE |
I2 | Datenbanktyp (optional). | |
0 |
Voreinstellung | ||
2 |
DB2 | ||
4 |
CNX | ||
Gültige Funktionen für den Parameter #FUNCTION sind:
| Funktion | Parameter | Erläuterung |
|---|---|---|
CLOSE |
- | Schließt den Cursor für das SELECT-Statement.
|
EXECUTE |
#TEXT |
Schließt den Cursor für das SELECT-Statement. |
FETCH |
#TEXT |
Gibt eine Zeile aus dem SELECT-Statement zurück.
After Nach |
TITLE |
#TEXT |
Gibt die Header-Literale für das SELECT-Statement zurück.
|
Der Parameter #RESPONSE kann die folgenden Rückmeldecodes
enthalten:
| Code | Funktion | Erläuterung |
|---|---|---|
5 |
EXECUTE |
Das Statement ist ein SELECT-Statement.
|
6 |
TITLE, FETCH |
Die Daten werden abgeschnitten; nur beim ersten Aufruf von TITLE
oder FETCH gesetzt.
|
100 |
FETCH |
Kein Datensatz/Ende der Daten. |
-2 |
- | Nicht unterstützter Datentyp (z.B. GRAPHIC).
|
-3 |
TITLE, FETCH |
Kein Cursor geöffnet. |
-4 |
- | Zu viele Spalten in der Ergebnistabelle. |
-5 |
- | SQLCODE aus Aufruf. |
-6 |
- | Keine Versionsübereinstimmung. |
-7 |
- | Ungültige Funktion. |
-8 |
- | Fehler vom SQL-Aufruf. |
-9 |
- | Arbeitsbereich ungültig (möglicherweise Relokation). |
-10 |
- | Schnittstelle nicht verfügbar. |
-11 |
EXECUTE |
Die ersten beiden Bytes des Statements sind nicht leer. |
Der erste Aufruf muss ein EXECUTE-Aufruf sein. NDBISQLD hat
eine feste SQLDA AREA, die Platz für 50 Spalten bietet. Wenn dieser Bereich für ein
bestimmtes SELECT zu klein ist, ist es möglich, bei den Aufrufen von
NDBISQLD mit #WORK(A)DYNAMIC einen optionalen Arbeitsbereich
anzugeben.
Dieser Arbeitsbereich wird verwendet, um die SQLDA und temporäre Arbeitsfelder wie
Null-Indikatoren und Hilfsfelder für numerische Spalten aufzunehmen. Kalkulieren Sie 16
Bytes für den SQLDA-Header und 44 Bytes für jede Ergebnisspalte sowie 2 Bytes
Null-Indikator für jede Spalte und Platz für jede numerische Spalte, wenn Sie
#WORK(A)DYNAMIC bei NDBISQLD-Aufrufen angeben. Wenn diese
optionalen Parameter bei einem EXECUTE-Aufruf angegeben werden, müssen sie
auch bei jedem folgenden Aufruf angegeben werden.
Handelt es sich bei dem Statement um ein SELECT-Statement (d.h. es wird der Rückmeldecode
5 zurückgegeben), kann eine beliebige Folge von TITLE- und
FETCH-Aufrufen verwendet werden, um die Daten abzurufen. Ein Rückmeldecode
von 100 zeigt das Ende der Daten an.
Der Cursor muss mit einem CLOSE-Aufruf geschlossen werden.
Der Funktionscode EXECUTE schließt implizit einen Cursor, der durch einen
vorherigen EXECUTE-Aufruf für ein SELECT-Statement geöffnet
wurde.
In TP-Umgebungen kann zwischen einem EXECUTE-Aufruf und einem
TITLE-, FETCH- oder CLOSE-Aufruf, der sich auf
dasselbe Statement bezieht, keine Terminal-E/A durchgeführt werden.
Das Natural-Subprogramm NDBNOERR dient zur Unterdrückung von
Natural-NAT3700-Fehlern, die durch den nächsten SQL-Aufruf verursacht werden. Dies
ermöglicht eine kontrollierte Fortsetzung des Programms, wenn ein SQL-Statement einen
SQLCODE ungleich Null erzeugt. Nachdem der SQL-Aufruf ausgeführt wurde, wird
NDBERR zur Untersuchung des SQLCODE verwendet.
Ein Beispielprogramm namens CALLNOER wird auf dem Installationsmedium
mitgeliefert; es demonstriert, wie NDBNOERR aufgerufen werden kann. Eine
Beschreibung des Aufrufformats und der Parameter finden Sie im Textobjekt
NDBNOERT.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBNOERR'
Für dieses Subprogramm sind keine Parameter vorgesehen.
Anmerkung
Es werden nur NAT3700-Fehler (d.h. SQL-Rückmeldecodes ungleich Null) unterdrückt, und
außerdem nur Fehler, die durch den nächstfolgenden SQL-Aufruf verursacht werden.
Wenn NDBNOERR vor einem Statement aufgerufen wird, das eine
Datenbankschleife einleitet, und ein Initialisierungsfehler auftritt, wird keine
Verarbeitungsschleife eingeleitet, es sei denn, es wurde eine IF NO RECORDS
FOUND-Klausel angegeben.
Wenn NDBNOERR innerhalb einer Datenbankschleife aufgerufen wird, gilt
dies nicht für die Verarbeitungsschleife selbst, sondern nur für das SQL-Statement,
das anschließend innerhalb dieser Schleife ausgeführt wird.
Das Natural-Subprogramm NDBNROW wird verwendet, um die Anzahl der von den
Natural-SQL-Statements Searched UPDATE, Searched DELETE und
INSERT betroffenen Zeilen zu ermitteln.
Die Anzahl der betroffenen Zeilen wird aus dem SQL-Kommunikationsbereich (SQLCA) gelesen.
Ein positiver Wert steht für die Anzahl der betroffenen Zeilen, während ein Wert von minus
eins (-1) anzeigt, dass alle Zeilen einer Tabelle in einem segmentierten
Tablespace gelöscht wurden, siehe auch die Natural-Systemvariable *NUMBER in der
Natural-Systemvariablen-Dokumentation.
Auf dem Installationsmedium befindet sich ein Beispielprogramm namens
CALLNROW, das den Aufruf von NDBNROW demonstriert. Eine
Beschreibung des Aufrufformats und der Parameter finden Sie in dem Textobjekt
NDBNROWT.
Das aufrufende Natural-Programm muss die folgende Syntax verwenden:
CALLNAT 'NDBNROW' #NUMBER
Der Parameter #NUMBER (I4) enthält die Anzahl der betroffenen Zeilen.
Für Db2 bietet Natural eine TIMESTAMP-Spalte als alphanumerisches Feld (A26)
im Format YYYY-MM-DD-HH.MM.SS.MMMMMM.
Da Natural noch keine Berechnungen mit solchen Feldern unterstützt, wird das
Natural-Subprogramm NDBSTMP bereitgestellt, um diese Art von Funktionalität
zu ermöglichen. Es konvertiert Natural-Zeitvariablen in Db2-Zeitstempel und umgekehrt und
führt arithmetische Berechnungen mit Db2-Zeitstempeln durch.
Ein Beispielprogramm namens CALLSTMP wird auf dem Installationsmedium
mitgeliefert; es demonstriert, wie NDBSTMP aufgerufen werden kann. Eine
Beschreibung des Aufrufformats und der Parameter ist im Textobjekt NDBSTMPT
enthalten.
Die verfügbaren Funktionen sind:
| Code | Erläuterung |
|---|---|
ADD |
Addiert Zeiteinheiten (Labeled Durations, s. Anmerkung weiter unten) zu einem gegebenen Db2-Zeitstempel und gibt eine Natural-Zeitvariable und einen neuen Db2-Zeitstempel zurück. |
CNT2 |
Konvertiert eine Natural-Zeitvariable (Format T) in einen Db2-Zeitstempel
(Spaltentyp TIMESTAMP) und Labeled Durations.
|
C2TN |
Konvertiert einen Db2-Zeitstempel (Spaltentyp TIMESTAMP) in eine
Natural-Zeitvariable (Format T) und Labeled Durations.
|
DIFF |
Ermittelt die Differenz zwischen zwei gegebenen Db2-Zeitstempeln und gibt Labeled Durations zurück. |
GEN |
Generiert einen Db2-Zeitstempel aus den aktuellen Datums- und Zeitwerten der
Natural-Systemvariablen *TIMX und gibt einen neuen
Db2-Zeitstempel zurück.
|
SUB |
Subtrahiert Labeled Durations von einem gegebenen Db2-Zeitstempel und gibt eine Natural-Zeitvariable und einen neuen Db2-Zeitstempel zurück. |
TEST |
Prüft einen gegebenen Db2-Zeitstempel auf gültiges Format und gibt
TRUE oder FALSE zurück.
|
Anmerkung
Labeled Durations sind Einheiten von Jahr, Monat, Tag, Stunde, Minute, Sekunde und
Mikrosekunde.
DB2SERV ist ein Assembler-Programm-Einstiegspunkt, der aus einem
Natural-Programm heraus aufgerufen werden kann.
DB2SERV führt eine der folgenden Funktionen aus:
Funktion
D, die das SQL-Statement EXECUTE IMMEDIATE
ausführt.
Funktion
P, die ein Assembler-Modul namens NDBPLAN
aufruft.
Die Parameter- oder Variablenwerte, die von jeder dieser Funktionen zurückgegeben werden, werden auf ihr Format, ihre Länge und ihre Anzahl überprüft.
Die Funktion D führt das SQL-Statement EXECUTE IMMEDIATE aus.
Damit können SQL-Statements innerhalb eines Natural-Programms ausgegeben werden.
Der SQL-Statement-String, der auf das EXECUTE IMMEDIATE-Statement folgt,
muss der Natural-Programmvariablen STMT zugewiesen werden.
Er muss gültige SQL-Statements enthalten, die mit dem EXECUTE
IMMEDIATE-Statement zulässig sind, wie in der entsprechenden IBM-Literatur
beschrieben. Beispiele finden Sie unten und in den Demonstrationsprogrammen
DEM2* in der Natural System Library SYSDB2.
Anmerkung
Die Bedingungen, die für die Ausgabe der Natural-Statements END
TRANSACTION oder BACKOUT TRANSACTION gelten, gelten auch für die
Ausgabe der SQL-Statements COMMIT oder ROLLBACK.
CALL 'DB2SERV' 'D' STMT STMTL SQLCA RETCODE
Die in diesem Kommando verwendeten Variablen sind in der folgenden Tabelle beschrieben:
| Variable | Format/Länge | Erläuterung | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
STMT |
Annn |
Enthält einen Kommando-String, der aus der oben beschriebenen SQL-Syntax besteht. | ||||||||
STMTL |
I2 | Enthält die Länge des in STMT definierten
Strings.
|
||||||||
SQLCA |
A136 | Gibt den aktuellen Inhalt des SQL-Kommunikationsbereichs zurück. | ||||||||
RETCODE |
I2 | Gibt einen Schnittstellen-Rückgabecode zurück. Die folgenden Codes sind
möglich:
|
Der aktuelle Inhalt des SQLCA und ein Schnittstellen-Rückgabecode
(RETCODE) werden zurückgegeben. Der SQLCA ist eine Sammlung von
Variablen, die von Db2 verwendet werden, um einem Anwendungsprogramm Informationen
über die Ausführung seiner SQL-Statements zu liefern.
Die folgenden Beispiele zeigen, wie Sie DB2SERV mit der Funktion
D verwenden können.
**************************************************************************
* DEM2CREA - CREATE TABLE NAT.DEMO *
**************************************************************************
*
DEFINE DATA
LOCAL USING DEMSQLCA
LOCAL
* Parameters for DB2SERV
1 STMT (A250)
1 STMTL (I2) CONST <250>
1 RETCODE (I2)
*
END-DEFINE
*
COMPRESS 'CREATE TABLE NAT.DEMO'
'(NAME CHAR(20) NOT NULL,'
' ADDRESS VARCHAR(100) NOT NULL,'
' DATEOFBIRTH DATE NOT NULL,'
' SALARY DECIMAL(6,2),'
' REMARKS VARCHAR(500))'
INTO STMT
CALL 'DB2SERV' 'D' STMT STMTL SQLCA RETCODE
*
END TRANSACTION
*
IF RETCODE = 0
WRITE 'Table NAT.DEMO created'
ELSE
FETCH 'SQLERR'
END-IF
END
**************************************************************************
Anmerkung
Die Funktionalität der DB2SERV-Funktion D wird auch mit
dem PROCESS SQL-Statement bereitgestellt.
**************************************************************************
* DEM2SET - Set Current SQLID *
**************************************************************************
*
DEFINE DATA
LOCAL USING DEMSQLCA
LOCAL
* Parameter for DB2SERV
1 STMT (A250)
1 STMTL (I2) CONST <250>
1 RETCODE (I2)
1 OLDSQLID (A8)
1 NEWSQLID (A8)
*
END-DEFINE
*
SELECT DISTINCT CURRENT SQLID
INTO OLDSQLID
FROM SYSIBM.SYSTABLES
ESCAPE BOTTOM
END-SELECT
*
MOVE 'SET CURRENT SQLID="PROD"';
TO STMT
CALL 'DB2SERV' 'D' STMT STMTL SQLCA RETCODE
*
IF RETCODE > 0
FETCH 'SQLERR'
ELSE
SELECT DISTINCT CURRENT SQLID
INTO NEWSQLID
FROM SYSIBM.SYSTABLES
ESCAPE BOTTOM
END-SELECT
*
WRITE ' Old SQLID was :' OLDSQLID
WRITE ' New SQLID is :' NEWSQLID
END-IF
*
END
**************************************************************************
Bei Verwendung von SET CURRENT SQLID kann der Ersteller-Name (Creator
Name) einer Tabelle durch die aktuelle SQLID ersetzt werden. Damit ist es möglich, auf
identische Tabellen mit demselben Tabellennamen, aber mit unterschiedlichen
Ersteller-Namen zuzugreifen. Tabellennamen dürfen also nicht durch einen
Ersteller-Namen qualifiziert werden, wenn dieser durch die SQLID ersetzt werden
soll.
In allen unterstützten TP-Monitor-Umgebungen kann die SQLID dann über
Terminal-Ein-/Ausgaben hinweg beibehalten werden, bis entweder die Sitzung beendet
oder sie über DB2SERV zurückgesetzt wird.
Die Funktion P ruft ein Assembler-Modul namens NDBPLAN auf,
das zum Aufbau und/oder Abbau der Db2-Verbindung unter TSO und im Batch-Modus verwendet
wird. Damit kann eine Natural-Anwendung eine Planumschaltung unter TSO und im
Batch-Modus durchführen.
Das Programm DEM2PLAN ist ein Anwendungsbeispiel für den Einsatz von
DB2SERV mit der Funktion P.
Der Name des aktuellen Db2-Subsystems (#SSM) und der Name des neuen
Anwendungsplans (#PLAN) müssen angegeben werden. Außerdem werden ein
Schnittstellen-Rückgabecode (#RETCODE) und der Db2-Ursachencode
(#REASON) zurückgegeben.
CALL 'DB2SERV' 'P' #SSM #PLAN #RETCODE #REASON
| Variable | Format/Länge | Erläuterung | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
#SSM |
A4 | Enthält den Namen des aktuellen Db2-Subsystems. | ||||||||
#PLAN |
A8 | Enthält den Namen des neuen Plans. | ||||||||
#RETCODE |
Gibt einen Schnittstellen-Rückgabecode zurück. Die folgenden Codes sind
möglich:
|
|||||||||
#REASON |
I4 | Gibt den Ursachencode der CAF-Schnittstelle zurück (siehe auch die entsprechende Db2-Literatur von IBM). |
**************************************************************************
* DEM2PLAN - Switch application plan under TSO/Batch with CAF interface *
**************************************************************************
*
DEFINE DATA
LOCAL
* Parameter for DB2SERV
01 #SSM (A4)) CONST <'DB2'>
01 #PLAN (A8
01 #RETCODE (I2)
01 #REASON (I4)
*
END-DEFINE
*
INPUT 'PLEASE ENTER NEW PLAN NAME' #PLAN (AD='_'I)
*
END TRANSACTION
*
CALL 'DB2SERV' 'P' #SSM #PLAN #RETCODE #REASON
*
DECIDE FOR FIRST VALUE OF #RETCODE
*
VALUE 0
IGNORE
VALUE 99
INPUT 12/23 'This is not a CAF environment !!'
VALUE 8,12
INPUT 12/18 'New plan not scheduled, reason code'
#REASON (AD=OI EM=H(4))
NONE
INPUT 12/15 'CAF interface error'
#RETCODE (AD=OI EM=Z(3))
'with reason code'
#REASON (AD=OI EM=H(4))
*
END-DECIDE
*
END
**************************************************************************
Wichtig
Die Planumschaltung unter TSO und im Batch-Modus ist nur mit der
CAF-Schnittstelle möglich; siehe auch den Abschnitt Planumschaltung unter TSO und im
Batch-Modus.