PDA

View Full Version : SQL & Cobol



KingofKning
26-01-17, 08:49
Hallo *all,

angeblich kann ich ja aus einer UDF heraus auch ein Cobol Programm aufrufen.
Gibt es irgendwo ein Aussagekräftiges Beispiel?
Am liebsten mit Parameterübergabe hin und zurück damit ich etwas steuern kann.

Hatte jetzt auf Anhieb für mich nichts sinnvolles zum Thema gefunden.

Für Hinweise dankbar.

GG 4874

andreaspr@aon.at
26-01-17, 09:00
Hi,
ein Beispiel habe ich jetzt nicht, aber du kannst Cobol Programme als Externe SQL Prozedur/Funktion definieren.
Diese kannst du dann überall via SQL aufrufen.
Hast du das schon probiert?

lg Andreas

Fuerchau
26-01-17, 11:12
Die Aufrufe aus SQL unterscheiden sich nicht von denen für RPG oder andere.
Wichtig ist halt nur, sich für einen "Parameter Style" zu entscheiden, denn der unterscheidet im Wesentlichen, ob NULL-Flags möglich sind oder auch Fehlermeldungen zurückgegeben werden können.
Der Style SQL bzw. DB2 ist der vernünftigste:

Je Function/Procedure-Parameter ein Feld, bei Functions ein zusätzliches Feld für den Returnwert.
Anschließend je Feld einen Null-Anzeiger (S9(4) COMP-4), danach noch ein paar SQL-spezifische Infos wie SQLSTATE und MSG.
Steht alles im SQL-Programmierhandbuch.

B.Hauser
26-01-17, 11:45
Ich würde beim Registieren von Programmen und Prozeduren den Paramter-Style GENERAL benutzen, dann muss man nämlich die eigentlichen Programm-Parameter nicht erweitern.
Parameter Style SQL ist eigentlich nur für externe User Defined Functions erforderlch.

Birgitta

Fuerchau
26-01-17, 12:10
Style SQL ist erforderlich, wenn man mit NULL-Inhalten umgehen will und Fehler (nicht mit MSGAPI's) zurückgeben will.
Bei General entfällt nämlich der Aufruf, wenn einer der Parameter NULL ist. Dies kann Absicht sein, muss es aber nicht.
Im Sinne von SQL sollte man gerade den Style General nicht nehmen, da damit Aufrufoptimierungen u.ä. entfallen, außerdem sieht man in der Quelle auch besser, was da los ist und dass es sich um eine SQL-Function/-Procedure handelt.
Möchte man "Allerweltsprogramme", die sowohl von SQL als auch native aufgerufen werden können, sollte man grundsätzlich SQL wählen, da man per "EXEC SQL CALL ..." oder "EXEC SQL SET : MYVar = MyFunc(...)" den Aufruf ja trotzdem hinbekommt.

KingofKning
26-01-17, 13:16
Also nach dem Hinweis auf das SQl Handbuch habe ich mit ein wenig Lesen und googeln folgenden Link gefunden.
https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/apsg/src/tpc/db2z_xmpcobolstoredproceduregeneral.html

BTW. Die benutzen auch Parameter-Style General, was mir jetzt aber noch nicht wirklich was sagt.....

GG 4874