Naja, eine Prozedur, die ein externes Programm aufruft, muss auch entsprechend definiert werden.
D.h., beim CREATE PROCEDURE wird der Name des aufzurufenden Programmes sowie Übergabeparameter mitgegeben.
Der Aufruf erfordert dann nur noch den Prozedurnamen und die Parameter.
Das Gleiche gilt auch fur CREATE FUNCTION, nur dass diese einen Returnwert hat.
Beispiel eier CREATE FUNCTION:
Code:
CREATE FUNCTION USMOD_16/DATESERIAL
(YEAR INTEGER,
MONTH INTEGER,
DAY INTEGER)
RETURNS DATE
LANGUAGE RPGLE
EXTERNAL NAME 'USMOD_16/DATSER'
DETERMINISTIC
RETURNS NULL ON NULL INPUT
NO SQL
NO EXTERNAL ACTION
PARAMETER STYLE SQL
ALLOW PARALLEL
NOT FENCED
Beispiel des zugehörigen ILERPG's:
Code:
hactgrp(*caller) dftactgrp(*no) datfmt(*iso)
d SYear s 10I 0
d SMonth s 10I 0
d SDay s 10I 0
d SQLDate s d
d SYear_Ind s 5I 0
d SMonth_Ind s 5I 0
d SDay_Ind s 5I 0
d SQLDate_Ind s 5I 0
d SQLState s 5
d FuncName s 139 varying
d SpecName s 128 varying
d DiagMsg s 70 varying
c *entry plist
c parm SYear
c parm SMonth
c parm SDay
c parm SQLDate
c parm SYear_Ind
c parm SMonth_Ind
c parm SDay_Ind
c parm SQLDate_Ind
c parm SQLState
c parm FuncName
c parm SpecName
c parm DiagMsg
c*
c/free
if SYear_ind <> *zero
or SMonth_ind <> *zero
or SDay_ind <> *zero;
SQLDate_ind = -1; // Ergebnis ist NULL
else;
monitor;
SQLDate = %date('0001-01-01')
+ %Years(SYear-1)
+ %Months(SMonth-1)
+ %Days(SDay-1);
on-error *all;
SQLDate_ind = -1; // Ergebnis ist NULL
endmon;
endif;
/end-free
c*
c*
c return
Weiteres findest du im SQL-Referenzhandbuch
http://publib.boulder.ibm.com/infoce...e/launcher.htm
Suche dort nach SQL.
Bookmarks