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
m'affiche
?????
(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