Appel d'un programme de service dans une procédure stockée

RPG (3 et 4, free), CL, SQL, etc...
Répondre
braconnier
Messages : 7
Enregistré le : mar. 16 sept. 2008, 21:12:13
Localisation : Cholet
Contact :

Appel d'un programme de service dans une procédure stockée

Message par braconnier »

Bonjour à tous,

Savez vous s'il est possible d'appeler un programme de service dans une procédure stockée en V5R4?

J'ai un programme de service nommé RtvDtaAra faisant réference à une fonction portant le même nom.

l'appel dans la procédure est fait sous cette forme :

Code : Tout sélectionner

 CREATE  PROCEDURE CDP543SQ            
(                                     
INOUT CDRETOU CHAR(1),                
INOUT CDNIVGR CHAR(2),                
INOUT PANNEOP DEC(4),                 
INOUT PCDTYPO CHAR(2),                
INOUT DTTRAIT CHAR(10)                
)                                     
LANGUAGE SQL                          
NOT DETERMINISTIC                     
DYNAMIC RESULT SETS  1                
READS SQL DATA                        
BEGIN                                 
                                      
      DECLARE ERREUR CHAR(7);   
(...)
     SET CDRETOU = '0';                                 
     SET CDNIVGR = '00';                                
                                                        
     SET ERREUR = RtvDtaAra(DTTRAIT,'CD3456BD');        
                                                        
     -- Si pas d'annee passee en parametre (PANNEOP = 0)
     IF PANNEOP = 0 THEN                                
       OPEN C1;                                         
       SET RESULT SETS CURSOR C1;                       
     -- Sinon                                           
     ELSE                                               
       OPEN C2;                                         
       SET RESULT SETS CURSOR C2;                       
     END IF;                                            
END;                                                    
j'ai une erreur à l'execution :
ID message . . . . . . : SQL0204 Gravité . . . . . . . : 30
Type de message . . . : Diagnostic
Date d'envoi . . . . . : 16/10/09 Heure d'envoi . . . . : 10:22:56

Message . . . . : RTVDTAARA de type *N dans *LIBL non trouvé.
Cause . . . . . : RTVDTAARA de type *N dans *LIBL n'a pas été trouvé. Si
*ALL est le nom du membre, la table n'est pas partitionnée. S'il s'agit
d'une instruction ALTER TABLE et que le type est *N, aucune contrainte ou
aucune partition n'a été trouvée. S'il ne s'agit pas d'une instruction ALTER
TABLE et que le type est *N, une fonction, une procédure, un déclencheur ou
un objet séquence est introuvable.
Si aucune fonction n'a été trouvée, RTVDTAARA est le programme de service
contenant la fonction. La fonction ne sera pas trouvée, à moins que le nom
externe et le nom d'usage ne correspondent exactement. Recherchez dans
l'historique du travail un message donnant plus de détails sur la fonction
recherchée et le nom qui ne correspondait pas.
Merci, pour vos éventuelles pistes.

Ludovic Braconnier

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

fonction dans un *SRVPGM

Message par cmasse »

bonjour,

il faut déclarer la fonction du *SRVPGM en tant que fonction SQL (UDF) par

CREATE FUNCTION mabib/RTVDTAARA (CHAR(10) )
RETURNS CHAR(???)
EXTERNAL NAME 'MABIB/RTVDTAARA(RTVDTAARA)'
PARAMETER STYLE GENERAL
RETURNS NULL ON NULL INPUT ;

la fonction est du coup utilisable en tant que fonction SQL, procédure cataloguée ou requête SQL. (SELECT ... WHERE RTVDTAARA(uneda) = 'xxx')


Attention MABIB, doit être dans *LIBL....
Christian Massé (Volubis.fr)

Répondre