Net.Data Verwaltung und Programmierung für OS/2, Windows NT und UNIX

Aufrufen gespeicherter Prozeduren

Eine gespeicherte Prozedur ist ein kompiliertes Programm, das auf dem lokalen oder fernen DB2-Server gespeichert ist und SQL-Anweisungen ausführen kann. In Net.Data werden gespeicherte Prozeduren von Net.Data-Funktionen mit Hilfe der SQL-Anweisung CALL aufgerufen. Parameter für gespeicherte Prozeduren werden aus der Parameterliste der Net.Data-Funktion übergeben. Sie können gespeicherte Prozeduren einsetzen, um die Leistung und die Integrität zu erhöhen, indem Sie kompilierte SQL-Anweisungen auf dem Datenbank-Server speichern.

In diesem Abschnitt werden folgende Themen behandelt:

Syntax für gespeicherte Prozeduren

Die Syntax für die gespeicherte Prozedur verwendet die Anweisung FUNCTION, die Anweisung CALL und wahlfrei einen REPORT-Block.

%function (dtw_sql) funktionsname ([IN datentyp arg1, INOUT datentyp arg2,
    OUT tabellenname...])
  CALL gespeicherte_prozedur [(ergebnismenge....)]
[%REPORT(ergebnismenge...)]

Dabei gilt folgendes:

funktionsname
Ist der Name der Net.Data-Funktion, die den Aufruf der gespeicherten Prozedur initialisiert.

gespeicherte_prozedur
Ist der Name der gespeicherten Prozedur.

datentyp
Ist einer der von Net.Data unterstützten Datentypen der Datenbank wie in Tabelle 5 gezeigt. Die in der Parameterliste angegebenen Datentypen müssen mit den Datentypen in der gespeicherten Prozedur übereinstimmen. Weitere Informationen zu diesen Datentypen finden Sie in Ihrer Datenbankdokumentation.

tabellenname
Ist der Name einer Net.Data-Tabelle, in der die Ergebnismenge gespeichert werden soll (wird nur verwendet, wenn die Ergebnismenge in einer Net.Data-Tabelle gespeichert werden soll). Wenn dieser Parametername angegeben ist, muß er mit dem zugehörigen Parameternamen für ergebnismenge übereinstimmen.

ergebnismenge
Ein Name, der eine von der gespeicherten Prozedur zurückgegebene Ergebnismenge einem REPORT-Block zuordnet. Wenn dieser Parameter angegeben ist, muß er mit dem zugehörigen Parameternamen für tabellenname übereinstimmen.

Tabelle 5. Datentypen für gespeicherte Prozeduren
BIGINT FLOAT SMALLINT
CHAR INTEGER TIME
DATE GRAPHIC TIMESTAMP
DECIMAL LONGVARCHAR VARCHAR
DOUBLE LONGVARGRAPHIC VARGRAPHIC
DOUBLEPRECISION




Aufrufen einer gespeicherten Prozedur

Eine gespeicherte Prozedur wird wie folgt aufgerufen:

  1. Definieren Sie eine Funktion, die einen Aufruf an die gespeicherte Prozedur initialisiert.
    %function (dtw_sql) funktionsname()
    

  2. Geben Sie wahlfrei IN-, INOUT- oder OUT-Parameter für die gespeicherte Prozedur an, einschließlich eines Tabellennamens zum Speichern der Ergebnismenge in einer Net.Data-Tabelle (Sie müssen eine Net.Data-Tabelle nur dann angeben, wenn die Ergebnismenge in der Net.Data-Tabelle gespeichert werden soll).
    %function (dtw_sql) funktionsname (IN datentyp
    arg1, INOUT datentyp arg2, OUT tabellenname...)
    

  3. Geben Sie mit Hilfe der Anweisung CALL den Namen der gespeicherten Prozedur an.
     CALL  gespeicherte_prozedur
    

  4. Wenn die gespeicherte Prozedur nur eine Ergebnismenge generiert, können Sie wahlfrei einen REPORT-Block angeben, um zu definieren, wie Net.Data die Ergebnismenge anzeigen soll.
    %REPORT
    

    Beispiel:

    %function (dtw_sql) mystoredproc (IN CHAR(30) arg1)  {
         CALL myproc
     %report {
      ...
     %row {  ....   %}
      ...
     %}
    %}
    

  5. Wenn die gespeicherte Prozedur mehrere Ergebnismengen generiert, haben Sie folgende Möglichkeiten:

Übergeben von Parametern

Sie können Parameter an eine gespeicherte Prozedur übergeben und die gespeicherte Prozedur die Parameterwerte aktualisieren lassen, so daß die neuen Werte an das Net.Data-Makro zurückgegeben werden. Ein Parameter wird an eine gespeicherte Prozedur übergeben, indem der Parametername mit dem Schlüsselwort IN angegeben wird. Wenn eine gespeicherte Prozedur den Parameter aktualisiert, müssen Sie den Parameter für den zurückzugebenden Wert mit dem Schlüsselwort INOUT bzw. OUT übergeben. Der Datentyp, der für einen Parameter angegeben wird, muß mit dem übereinstimmen, den die gespeicherte Prozedur erwartet.

Beispiel 1: Übergeben eines Parameterwerts an die gespeicherte Prozedur

%function (dtw_sql) mystoredproc (IN CHAR(30) valuein)  {
    CALL myproc
...

Beispiel 2: Zurückgeben eines Werts aus einer gespeicherten Prozedur

%function (dtw_sql) mystoredproc (OUT VARCHAR(9) retvalue)  {
  CALL myproc
...

Verarbeiten von Ergebnismengen

Sie können angeben, ob eine oder mehrere Ergebnismengen von einer gespeicherten Prozedur zurückgegeben werden. Die Ergebnismengen können in Net.Data-Tabellen zur weiteren Verarbeitung innerhalb Ihres Makros gespeichert oder mit Hilfe eines REPORT-Blocks angezeigt werden. Sie müssen jeder durch eine gespeicherte Prozedur generierten Ergebnismenge einen Namen zuordnen. Dies geschieht durch die Angabe von Parametern in der SQL-Anweisung CALL. Der Name, den Sie für eine Ergebnismenge angeben, kann anschließend einem REPORT-Block oder einer Net.Data-Tabelle zugeordnet werden, so daß Sie festlegen können, wie die einzelnen Ergebnismengen von Net.Data verarbeitet werden. Sie haben folgende Möglichkeiten:

Wenn eine gespeicherte Prozedur mehrere Ergebnismengen generiert, müssen Sie in der SQL-Anweisung CALL einen Parameter für jede Ergebnismenge angeben.

Wenn nur eine Ergebnismenge zurückgegeben und diese in einem Standardbericht angezeigt werden soll:

Verwenden Sie die folgende Syntax:

%function (dtw_sql) funktionsname () {
    CALL gespeicherte_prozedur ()
%}

Beispiel:

 %function (dtw_sql) mystoredproc() {
    CALL myproc
%}

Wenn nur eine Ergebnismenge zurückgegeben und ein REPORT-Block für die Verarbeitung der Anzeige angegeben werden soll:

Verwenden Sie die folgende Syntax:

%function (dtw_sql) funktionsname () {
     CALL gespeicherte_prozedur
 %REPORT (ergebnismenge) {
  ...
 %}
%}

Beispiel:

%function (dtw_sql) mystoredproc () {
     CALL  myproc
%REPORT {
      ...
      %row {  ....   %}
      ...
 %}
%}

Alternativ kann die folgende Syntax verwendet werden:

%function (dtw_sql) funktionsname () {
    CALL gespeicherte_prozedur (ergebnismenge)

 %REPORT (ergebnismenge) {
  ...
 %}
%}

Beispiel:

%function (dtw_sql) mystoredproc () {
    CALL myproc (mytable1)
 %REPORT (mytable1) {
  ...
 %row {  ....   %}
  ...
 %}
%}

Wenn nur eine Ergebnismenge in einer Net.Data-Tabelle zur weiteren Verarbeitung gespeichert werden soll:

Verwenden Sie die folgende Syntax:

%function (dtw_sql) funktionsname (OUT tabellenname) {
   CALL gespeicherte_prozedur (tabellenname)
%}

Beispiel:

%define DTW_DEFAULT_REPORT = "NO"

%function (dtw_sql) mystoredproc (OUT mytable1) {
   CALL myproc (mytable1)
%}

Beachten Sie, daß die Variable DTW_DEFAULT_REPORT auf den Wert NO gesetzt ist, so daß kein Standardbericht für die Ergebnismenge generiert wird.

Wenn mehrere Ergebnismengen zurückgegeben und diese im Standardberichtsformat angezeigt werden sollen:

Verwenden Sie die folgende Syntax:

%function (dtw_sql) funktionsname () {
    CALL gespeicherte_prozedur (tabellenname1, tabellenname2)
%}

Beispiel:

%function (dtw_sql) mystoredproc () {
    CALL myproc (mytable1, mytable2)
%}

Wenn mehrere Ergebnismengen zurückgegeben und die Ergebnismengen in Net.Data-Tabellen zur weiteren Verarbeitung gespeichert werden sollenn:

Verwenden Sie die folgende Syntax:

 %function (dtw_sql) funktionsname (OUT tabellenname1, tabellenname2) {
    CALL gespeicherte_prozedur (ergebnismenge1, ergebnismenge2)
%}

Beispiel:

%define DTW_DEFAULT_REPORT = "NO"

%function (dtw_sql) mystoredproc (OUT mytable1 mytable2) {
     CALL myproc (mytable1, mytable2)
%}

Beachten Sie, daß die Variable DTW_DEFAULT_REPORT auf den Wert NO gesetzt ist, so daß kein Standardbericht für die Ergebnismengen generiert wird.

Wenn mehrere Ergebnismengen zurückgegeben und REPORT-Blöcke für die Verarbeitung der Anzeige angegeben werden sollen:

Jeder Ergebnismenge wird ein eigener REPORT-Block zugeordnet. Verwenden Sie die folgende Syntax:

%function (dtw_sql) funktionsname () {
   CALL gespeicherte_prozedur (ergebnismenge1, ergebnismenge2)
 %REPORT (ergebnismenge1)
   ...
   %row {  ....   %}
   ...
 %}
 %REPORT (ergebnismenge2)
   ...
   %row {  ....   %}
   ...
 %}
%}

Beispiel:

%function (dtw_sql) mystoredproc () {
   CALL myproc (mytable1, mytable2)

 %REPORT(mytable1)
  ...
 %row {  ....   %}
  ...
 %}

 %REPORT(mytable2)
  ...
 %row {  ....   %}
  ...
 %}
%}

Wenn mehrere Ergebnismengen zurückgegeben und für jede Ergebnismenge verschiedene Anzeige- oder Verarbeitungsoptionen angegeben werden sollen:

Sie können für jede Ergebnismenge andere Verarbeitungsoptionen angeben, indem Sie eindeutige Parameternamen verwenden. Beispiel:

%function (dtw_sql) mystoredproc (OUT mytable2) {
    CALL myproc (mytable1, mytable2, mytable3)

 %REPORT(mytable1)
 ...
 %row {  ....   %}
 ...
 %}
%}

Die Ergebnismenge mytable1 wird vom entsprechenden REPORT-Block verarbeitet und wie vom Makroschreiber angegeben angezeigt. Die Ergebnismenge mytable2 wird in der Net.Data-Tabelle mytable2 gespeichert und kann nun zur weiteren Verarbeitung, zum Beispiel zur Übergabe an eine andere Funktion, verwendet werden. Die Ergebnismenge mytable3 wird im Standardberichtsformat von Net.Data angezeigt, weil für sie kein REPORT-Block angegeben wurde.

Richtlinien und Einschränkungen für die Rückgabe mehrerer Ergebnismengen

Beachten Sie die folgenden Richtlinien und Einschränkungen für die Rückgabe mehrerer Ergebnismengen von einer gespeicherten Prozedur.

Richtlinien:

Einschränkungen:


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]