Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2011, 17h57   #1
Invité de passage
 
Homme Jean-Marc DUVAL
Consultant informatique
Inscription : mars 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jean-Marc DUVAL
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 7
Points : 1
Points : 1
Par défaut [AS400][V5R3] Ai-je oublié une étape dans la création d'une fonction utilisateur (UDF) ?

J'ai créé une fonction utilisateur PRIXBASE() qui me retourne un tarif en fonction de paramètres.
Je suis passé par un source que j'ai traité avec un RUNSQLSTM pour mon CREATE FUNCTION (même résultat avec iseries navigator).
La création c'est bien passée et je vois ma fonction dans le QSYS2/SYSFUNCS.
Pourtant, lorsque je veux l'utiliser dans un SQL, j'ai un message SQL0204 : PRIXBASE de type *N dans *LIBL non trouvé, alors que la fonction est qualifiée et que de toute façon la bibliothèque est en ligne.

Si quelqu'un à une idée sur la raison de cette anomalie, il est le bienvenu ;-)
jévolue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 18h48   #2
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
J'ai bien une petite idée mais colle ici ta fonction, stp.

Il s'agit sans doute de l'erreur courante dans la passage des paramètres. Je pense que tu passes le paramètre en dur sur l'écran STRSQL ou dans Run SQL Script du Navigator et que tu as défini ce paramètre en CHAR dans ta fonction. Me trompè-je ?
Code :
1
2
 
SELECT PRIXBASE('12345') ...
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 09h15   #3
Invité de passage
 
Homme Jean-Marc DUVAL
Consultant informatique
Inscription : mars 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jean-Marc DUVAL
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 7
Points : 1
Points : 1
Voici la définition :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
CREATE FUNCTION ZAGRALYS/PRIXBASE<blockquote>(                           
DOMAINE  CHAR( 3),          
TARIF    CHAR( 5),          
DEVISE   CHAR( 3),          
SOCIETE  CHAR( 3),          
TIERS    CHAR( 9),          
PRODUIT  CHAR(10),          
DATEAPPLI DECIMAL(8,0)      
)</blockquote>RETURNS DECIMAL(13, 4)           
LANGUAGE SQL                     
SPECIFIC ZAGRALYS/PRIXBASE       
NOT DETERMINISTIC                
READS SQL DATA                   
CALLED ON NULL INPUT             
RETURN (<blockquote>SELECT A.ATRVDE             
FROM AATARIL2 AS A          
WHERE A.ATRCDO = DOMAINE    
AND A.ATRCIN = TARIF      
AND A.ATRCIN = TARIF                                                   
AND A.ATRCDE = DEVISE                                                  
AND A.ATRSOC = SOCIETE                                                 
AND A.ATRTIE = TIERS                                                   
AND A.ATRNTA = 'T'                                                     
AND A.ATRNI1 = 'bbb'                                                   
AND A.ATRNI2 = 'bbb'                                                   
AND A.ATRNI3 = 'bbb'                                                   
AND A.ATRNI4 = 'bbb'                                                   
AND A.ATRCPO = PRODUIT                                                 
AND A.ATRGEN = 'bb'                                                    
AND A.ATRTRA = 'bbbbb'                                                 
AND A.ATRSAC = 'bbbbb'                                                 
AND A.ATRZON = '100 blancs'
AND A.ATRDDA =<blockquote>(                                                                  
SELECT MAX (B.ATRDDA)                                              
FROM AATARIL2 AS B                                                 
WHERE B.ATRCDO = A.ATRCDO                                          
AND B.ATRCIN = A.ATRCIN                                          
AND B.ATRCDE = A.ATRCDE                                          
AND B.ATRSOC = A.ATRSOC                                          
AND B.ATRTIE = A.ATRTIE                                          
AND B.ATRNTA = A.ATRNTA
AND B.ATRNTA = A.ATRNTA  
AND B.ATRNI1 = A.ATRNI1  
AND B.ATRNI2 = A.ATRNI2  
AND B.ATRNI3 = A.ATRNI3  
AND B.ATRNI4 = A.ATRNI4  
AND B.ATRCPO = A.ATRCPO  
AND B.ATRGEN = A.ATRGEN  
AND B.ATRTRA = A.ATRTRA  
AND B.ATRSAC = A.ATRSAC  
AND B.ATRDDA <= DATEAPPLI
AND B.ATRDAS = 0         
)</blockquote>AND A.ATRDAS = 0
)</blockquote>;
Et le style de requête pour l'utiliser est :

Code :
SELECT APRCPR, APRLPR, PRIXBASE('APP', 'PBFbb', 'EUR', 'bbb', 'bbbbbbbbb', APRCPR, 20101201)
Où APRCPR est le code article.
jévolue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 10h21   #4
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Philippe préssentait bien.
Quand tu appelles ta fonction avec des constantes, elles sont considérées comme des VARCHAR.
Défini plutôt des paramètres en VARCHAR au lieu de CHAR

Code :
1
2
3
4
5
6
7
8
9
10
CREATE FUNCTION ZAGRALYS/PRIXBASE
( 
DOMAINE VARCHAR( 3), 
TARIF VARCHAR( 5), 
DEVISE VARCHAR( 3), 
SOCIETE VARCHAR( 3), 
TIERS VARCHAR( 9), 
PRODUIT VARCHAR(10), 
DATEAPPLI DECIMAL(8,0) 
...
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 10h45   #5
Invité de passage
 
Homme Jean-Marc DUVAL
Consultant informatique
Inscription : mars 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jean-Marc DUVAL
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 7
Points : 1
Points : 1
La fonction "fonctionne" parfaitement avec ces modifications...
Il est regrettable que le message soit si peu explicite :
Citation:
PRIXBASE de type *N dans *LIBL non trouvé.
pour un problème de définition de variable.

Merci à vous car c'est typiquement le genre de problème sur lequel on peut rester des heures sans arriver nul part.
Vive le partage d'expérience sur les forums.
jévolue est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h58.


 
 
 
 
Partenaires

Hébergement Web