Probleme retour parametre DB2 SQL PL

RPG (3 et 4, free), CL, SQL, etc...
Répondre
manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

Probleme retour parametre DB2 SQL PL

Message 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

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

un message d'erreur ???

Message 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....
Christian Massé (Volubis.fr)

manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

(sans texte)

Message 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,

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

val. nulle

Message par cmasse »

Normalement le "-" représente la valeur nulle.

Il y a-t-il des valeurs nulles dans la base ?
Christian Massé (Volubis.fr)

manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

(sans texte)

Message 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

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

???

Message 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             
?????
Christian Massé (Volubis.fr)

manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

(sans texte)

Message 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.

manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

(sans texte)

Message 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

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

convention d'appellation

Message 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
Christian Massé (Volubis.fr)

Répondre