Page 1 sur 1

Probleme retour parametre DB2 SQL PL

Posté : jeu. 24 juil. 2014, 08:52:01
par manae
Bonjour,

j'ai créé une fonction en SQL PL mais les variables chaines me posent un problème quand elle viennent d'un select.

Cordialement,

BEGIN ATOMIC
DECLARE CHAINE CHAR ( 20 ) DEFAULT '/' ;
DECLARE CODE CHAR ( 4 ) ;
DECLARE EOF INTEGER DEFAULT 0 ;
DECLARE C1 CURSOR FOR SELECT CODE FROM TTOXE WHERE REF = REFERENCE ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET EOF = 1 ;

OPEN C1 ;
FETCH FROM C1 INTO CODE ;
WHILE EOF = 0 DO
SET CHAINE = TRIM ( CHAINE ) CONCAT TRIM ( CODE ) ;
FETCH FROM C1 INTO CODE ;
END WHILE ;
CLOSE C1 ;
RETURN CHAINE ;
END

un message d'erreur ???

Posté : jeu. 24 juil. 2014, 10:37:52
par cmasse
Franchement, si vous ne nous dites pas quel est le problème (code erreur, libellé du message, etc...), on va avoir du mal à vous répondre....

(sans texte)

Posté : jeu. 24 juil. 2014, 13:24:06
par manae
Bonjour,

Il n' y a pas de message ou de code erreur(à moins que je cherche au mauvais endroit)
il y a deux cas s'il existe des enregs alors on a un -
sinon / comme résultat.

Cordialement,

val. nulle

Posté : jeu. 24 juil. 2014, 15:26:24
par cmasse
Normalement le "-" représente la valeur nulle.

Il y a-t-il des valeurs nulles dans la base ?

(sans texte)

Posté : jeu. 24 juil. 2014, 15:37:58
par manae
Il n'y a pas de valeur nulle dans la base.
pour le test, il y a 2 enregs seulement.

c'est peut être cette syntaxe qui ne va pas
SET CHAINE = TRIM ( CHAINE ) CONCAT TRIM ( CODE ) ;

le while fonctionne bien j'ai compté le nbre de passage (2).
On dirait que le champs CODE (4 caractères alpha) lui pose problème.

j'ai du mal a trouvé de la doc sur DB2 SQL PL !!!!

Manae

???

Posté : jeu. 24 juil. 2014, 16:09:49
par cmasse
J'ai recréé la fonction avec ce code là

Code : Tout sélectionner

CREATE FUNCTION AF4TEST.LISTE ( 
	REFERENCE DECIMAL(1, 0) ) 
	RETURNS CHAR(20)   
	LANGUAGE SQL 
	NOT DETERMINISTIC 
	MODIFIES SQL DATA 
	CALLED ON NULL INPUT 
BEGIN ATOMIC 
 DECLARE CHAINE CHAR ( 20 ) DEFAULT '/' ; 
 DECLARE CODE CHAR ( 4 ) ; 
 DECLARE EOF INTEGER DEFAULT 0 ; 
 DECLARE C1 CURSOR FOR SELECT CODE FROM AF4TEST . TTOXE WHERE  REF = REFERENCE ; 
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET EOF = 1 ; 
  
OPEN C1 ; 
FETCH FROM C1 INTO CODE ; 
WHILE EOF = 0 DO 
SET CHAINE = TRIM ( CHAINE ) CONCAT TRIM ( CODE ) ; 
FETCH FROM C1 INTO CODE ; 
END WHILE ; 
CLOSE C1 ; 
RETURN CHAINE ; 
END  ; 
L'instruction

Code : Tout sélectionner

values AF4TEST.liste(0);
m'affiche

Code : Tout sélectionner

/AABBCC             
?????

(sans texte)

Posté : jeu. 24 juil. 2014, 16:51:48
par manae
Bonjour,

le fichier contient une valeur référence(7,0) et un code(4)

le but de la fonction est de concaténer le champs code pour une référence donné dans une chaine de 20 caractères.
apparemment ça à l'air de fonctionner chez vous.

vous avez précisé la bibliothèque pour le fichier (pas moi), je ne sais pas si cela à un lien ???!!!

j'utilise iserie Navigator pour créé la fonction.

Cordialement.

(sans texte)

Posté : jeu. 24 juil. 2014, 17:04:55
par manae
Bonjour,

Un nouveau test, j'ai rajouté, comme vous, la bibliothèque et ça marche !!!!

y a t il un autre moyen que iserie Navigator pour créé des fonctions ?

Cordialement,
Manae

convention d'appellation

Posté : jeu. 24 juil. 2014, 17:05:14
par cmasse
j'ai créé une table sans doute assez proche

Code : Tout sélectionner

CREATE TABLE AF4TEST.TTOXE ( 
	REF DECIMAL(1, 0) DEFAULT NULL , 
	CODE CHAR(4) CCSID 297 DEFAULT NULL )   
	  
	RCDFMT TTOXE      ; 
L'absence de qualification est une bonne piste, voici la règle :

SI la convention d’appellation en cours est *SYS, SQL utilise *LIBL
Si la convention d'appellation est *SQL, SQL cherche une bibliothèque portant le NOM de l'utilisateur (OWNER)


Sous Sytem i Navigator, la convention s'indique sous Connexion/paramètres JDBC/Onglet Format