SQL kann zwar einfach ein beliebiges Programm per CALL aufrufen, allerdings nicht so einfach Parameter zurückgeben, z.B.:

CALL MYLIB.MYPGM ('P1', 123.45)

'P1' wird als CHAR(2) und 123.45 als PKD(5, 2) übergeben.

Möchtest du eine Funktion, die genau einen Wert zurückgibt, erstellst du eine SQL-Prozedur mit deinem Programm als externes Programm und definierst alle Parameter mit dem richtigen Typ und IN/INOUT.

Dann kannst du die Prozedur als Funktion aufrufen (z.B. select MyProc('P1', 123.45) from sysibm.sysdummy1).

Benötigt dein Programm komplexe Strukturen als Parameter so benötigst du einen Wrapper, also eine SQL-Funktion (extern) die die Einzel-Parameter in die Strukturen überführt, den CALL macht und das Ergebnis liefert.