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.