PDA

View Full Version : Wie löscht man via CL eine SQL-Procedure



becama
21-02-19, 16:19
Hi *all,

im Navigator ist das kein Problem, aber wie klappt das mit CL?
Gibt es dafür einen cmd? Wie finde ich SQL-Procedures mit 'ner 5250-Emu?

Danke und Gruß

Fuerchau
21-02-19, 17:41
Per CLP gibt es mittlerweise das Kommando RUNSQL.
In der Tabelle SYSPROCS bzw. SYSFUNCS findest du alles.

BenderD
22-02-19, 07:01
Per CLP gibt es mittlerweise das Kommando RUNSQL.
In der Tabelle SYSPROCS bzw. SYSFUNCS findest du alles.

... das ist ein wenig missverständlich. Gelöscht werden SQL Procedures mit der SQL Anweisung DROP PROCEDURE, die dann den SQL Repository Eintrag löscht und bei SQL Procedures auch das generierte C Programm löscht. Bei externen Procedures bleibt das Programm wie es ist.

Den DROP PROCEDURE kann man auch per CL mittels RUNSQL ausführen - aber mit allen Konsequenzen dieser verkrüppelten Programmiersprache: rudimentäres Error Handling, schlechte Lesbarkeit, miserable Wartbarkeit. Wenn man etwas besseres zur Auswahl hat, dann sollte man das nehmen.

D*B

becama
22-02-19, 07:29
Dankeschön.
Das heißt ich muss erst in der SYSPROCS schauen, ob die Procedure überhaupt existiert, damit der DROP dann nicht abschmiert, falls er nichts findet? Oder kann man auch mit MONMSG den evtl. nicht erfolgreichen DROP ignorieren?

andreaspr@aon.at
22-02-19, 07:52
Ich würde auch sagen, dass hier ein MONMSG absolut reicht.
Wenn du die DROP Befehle in ein SRC-File liegen hast, kannst du dies im CL mit RUNSQLSTM ausführen lassen.
Bei RUNSQLSTM hast du den Vorteil dass du hier den Parameter ERRLVL mitgeben kannst.
Ich glaube bei ERRLVL 21 wirft er keine Exception wenn die Prozedur nicht existiert.
Da bei nicht gefundenen DROP ein 20er Fehler kommt.
Außerdem ist es hübscher von der Wartbarkeit, solche Befehle nicht hardcoded im PGM zu haben :-)

lg Andreas

Fuerchau
22-02-19, 08:34
RUNSQLSTM steht aber u.U. nicht zur Verfügung, wenn man z.B. auch kein STRSQL hat.
Alternativ geht auch REXX, das ist auch immer da und kann ebenso SQL.