Wie kann ich eine gespeicherte Prozedur aus einem CL-Programm heraus ausführen? RUNSQLSTM erfordert ein Source-Member, aber ich möchte nur einen Befehl erstellen, damit die Benutzer einfach Variablen übergeben können, so dass dies nicht funktioniert.
Antworten
Zu viele Anzeigen?Sie können das Systemprogramm aufrufen QZDFMDB2
und übergeben Sie ihm einen Parameter mit dem auszuführenden SQL-String. In diesem Fall ist der SQL-String der Aufruf Ihrer gespeicherten Prozedur:
CALL PGM(QZDFMDB2) PARM('CALL PROCEDURE (''XYZ'', ''ABC'')')
Um Ihre Werte zu ersetzen, verwenden Sie eine Variable für den PARM:
DCL VAR(&CALL) TYPE(*CHAR) LEN(200)
CHGVAR VAR(&CALL)
VALUE('CALL PROCEDURE (''' *CAT &PARM1 *TCAT ''', ''' *CAT &PARM2 *TCAT ''')')
CALL PGM(QZDFMDB2) PARM(&CALL)
Es gibt möglicherweise 2 Optionen:
Erstellen Sie im CL-Programm ein temporäres Quellmitglied. Konstruieren Sie die SQL-Anweisung mit den angegebenen Parametern, um die gespeicherte Prozedur auszuführen, und schreiben Sie diesen Quellcode in das temporäre Element. Fügen Sie dann einen Aufruf an RUNSQLSTM mit dem generierten Member als Parameter hinzu.
Eine zweite Möglichkeit besteht darin, kein CL-Programm zu erstellen, sondern RPG/COBOL zu verwenden. Durch die Verwendung von Embedded SQL kann die Stored Procedure mit den Parametern ausgeführt werden. Deren Werte sollten vom Befehl an das Programm übergeben werden.
Es gab einmal einen Befehl, den jemand geschrieben hatte und den ich verwendet hatte. Ich kann diesen Hinweis nicht mehr finden, aber ich habe zwei andere Möglichkeiten:
- Dieser Artikel verwendet REXX
- Dieser Artikel verwendet RPG
Beide enthalten den Quellcode, den Sie benötigen, damit der Befehl funktioniert.