Volubis, le forum IBM i Index du Forum Volubis, le forum IBM i
avec les clubs Informatiques IPL et Bretagne.
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

SQL erreur -203

 
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
BrigitteG



Inscrit le: 20 Sep 2012
Messages: 68

MessagePosté le: Lun 29 Mai 2017, 12:49:42    Sujet du message: SQL erreur -203 Répondre en citant

Bonjour,

Je dois sélectionner un certain nombre d'enregistrement par sql en utilisant using.

dans un script, la requête sql fonctionne très bien
Code:
select copaip, nunati, nobovi, nutrav, danais from file1
join file2  using(copaip,nunati,cosu)                   
where copach = 'FR' and cheipg = '39258001' and cosu = '0' and     
dasort is null and xxx = '2'
group by COPAIP, NUNATI, Nobovi, Nutrav, Danais
order by COPAIP, NUNATI


J'inclue cette requête dans du code rpgle et aucun pb lors de la compile

Code:
EXEC SqL  DECLARE C1 CURSOR FOR
       SELECT COPAIP, NUNATI, Nobovi, Nutrav, Danais FROM file1
       join file2 using(copaip, nunati, cosu)
       where COPACH = :EàCopach and CHEIPG = :EàNuchep and DASORT is NULL and
       cosu = '0' and xxx = '2'
       group BY COPAIP, NUNATI, Nobovi, Nutrav, Danais
       order by COPAIP, NUNATI
       FOR FETCH ONLY;
       EXEC SqL OPEN C1;
       dow sqlCod = 0;
....


Lors du traitement de l'applicatif j'ai le code erreur
et j'obtiens un code erreur -203 (A column reference is ambiguous, because of duplicate names.)

Pouvez-vous me dire où je fais une erreur ?

Je vous remercie d'avance pour votre réponse
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 691
Localisation: Nantes

MessagePosté le: Lun 29 Mai 2017, 13:13:50    Sujet du message: USING Répondre en citant

Même version d'OS pour le script et le pgm ?

le message d'erreur donne-t-il le nom de la colonne ?
_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
BrigitteG



Inscrit le: 20 Sep 2012
Messages: 68

MessagePosté le: Lun 29 Mai 2017, 14:02:31    Sujet du message: SQL erreur -203 Répondre en citant

La zone est copaip.
la version de l'os est v7r2
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 691
Localisation: Nantes

MessagePosté le: Lun 29 Mai 2017, 14:32:44    Sujet du message: using ?? Répondre en citant

je ne vois pas trop, ce code fonctionne chez moi (7.3)
Code:

**free
dcl-s compteur int(10);
dcl-s nomp char(50);
dcl-s nomv char(50);
dcl-s code int(10);
exec sql
  declare C1 cursor for
   select pr_code, pr_nom, vin_nom
  from bdvin1/producteur join bdvin1/vins using(pr_code);
exec sql open c1;
exec sql fetch c1 into :code, :nomp, :nomv;
dow sqlcode = 0;
   compteur += 1;
   exec sql fetch c1 into :code, :nomp, :nomv;
ENDDO;
exec sql close c1;
dsply (%char(compteur));
*inLR = *on;                 

_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
BrigitteG



Inscrit le: 20 Sep 2012
Messages: 68

MessagePosté le: Lun 29 Mai 2017, 15:36:55    Sujet du message: SQL erreur -203 Répondre en citant

La seule différence que je vois c'est ceci using(copaip,nunati,cosu) j'ai trois zones au lieu d'une

avec votre code, aucun soucis.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 691
Localisation: Nantes

MessagePosté le: Lun 29 Mai 2017, 16:15:22    Sujet du message: doc SQL Répondre en citant

Pourtant le doc dit
Citation:
Any column specified in the USING clause cannot be qualified in the query.


https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/db2/rbafzjoinedt.htm
_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
BrigitteG



Inscrit le: 20 Sep 2012
Messages: 68

MessagePosté le: Mar 30 Mai 2017, 12:27:32    Sujet du message: pb compile Répondre en citant

Ce code ne passe pas à la compilation
Code:
SELECT i.COPAIP, i.NUNATI, b.Nobovi, b.Nutrav, b.Danais FROM file1 i   
join file2 b using(copaip,nunati)                                     
where i.COPACH = :EàCopach and i.CHEIPG = :EàNuchep and i.DASORT is NULL
and i.cosu = '0' and b.xxx = '2'                                     
group BY i.COPAIP, i.NUNATI, b.Nobovi, b.Nutrav, b.Danais               
order by i.COPAIP, i.NUNATI                                             


SQL0205 30 83 Position 28 La colonne NUNATI ne se trouve pas dans la
table FILE1 de BIB1.
SQL0205 30 83 Position 18 La colonne COPAIP ne se trouve pas dans la
table FILE1 de BIB1.


mais celui-ci oui
Code:
SELECT i.COPAIP, i.NUNATI, b.Nobovi, b.Nutrav, b.Danais FROM file1 i
        left join file2 b on(i.copaip = b.copaip and i.nunati = b.nunati and
        i.cosu = b.cosu)
        where i.COPACH = :EàCopach and i.CHEIPG = :EàNuchep and i.DASORT is NULL
        and i.cosu = '0' and b.xxx = '2'
        group BY i.COPAIP, i.NUNATI, b.Nobovi, b.Nutrav, b.Danais
        order by i.COPAIP, i.NUNATI               

et fonctionne à l'exécution
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 691
Localisation: Nantes

MessagePosté le: Mar 30 Mai 2017, 14:24:31    Sujet du message: ON vs USING Répondre en citant

Effectivement avec ON les zones de jointure sont présentes 2 fois (version "i" et version "b") on peux donc les qualifier.

Avec USING les zones de jointure ne sont présentes qu'une seule fois et ne peuvent pas être qualifiées.

Ça ne m'explique pas votre code erreur -203 initial. Laughing
_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 691
Localisation: Nantes

MessagePosté le: Mar 30 Mai 2017, 16:00:45    Sujet du message: pareil avec deux zones de jointure Répondre en citant

pareil avec deux zones de jointure, ce code s'exécute correctement :
Code:

**free
dcl-s compteur int(10);
dcl-s nomp char(50);
dcl-s nomv char(50);
dcl-s code int(10);
exec sql
  declare C1 cursor for
   select pr_code, pr_nom, vin_nom
  from bdvin1/producteur join bdvin1/vins using(pr_code, appel_code);
exec sql open c1;
exec sql fetch c1 into :code, :nomp, :nomv;
dow sqlcode = 0;
   compteur += 1;
   exec sql fetch c1 into :code, :nomp, :nomv;
ENDDO;
exec sql close c1;
dsply (%char(compteur));
*inLR = *on;                                         

_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
BrigitteG



Inscrit le: 20 Sep 2012
Messages: 68

MessagePosté le: Mer 31 Mai 2017, 10:13:57    Sujet du message: Répondre en citant

Bonjour,
Avec votre requête, c'est ok.
En procédant par élimination, c'est le order by qui me pose problème.

Code:
       EXEC SqL  DECLARE C1 CURSOR FOR
        SELECT Copaip, Nunati, b.Nobovi, b.Nutrav, b.Danais FROM IPGMOU
        join bovide b  using(copaip, nunati, cosu)
        where COPACH = :EàCopach and CHEIPG = :EàNuchep and DASORT is NULL
        and  b.xxx = '2' and cosu = '0'
        order by COPAIP, NUNATI ;
       EXEC SqL OPEN C1;
       EXEC SqL FETCH C1 INTO :wCOPAIP, :wNUNATI, :wNobovi, :wNutrav, :wDanais;           
       dow sqlCod = 0;
        exsr $ListeAnimal;
        EXEC SqL FETCH C1 INTO :wCOPAIP, :wNUNATI, :wNobovi, :wNutrav, :wDanais;
       enddo;
       EXEC SqL CLOSE C1;


Le nom COPAIP est ambigu. Et message -501 et il n'ouvre pas le curseur.
En enlevant l'order by, cela fonctionne.

Problème que je ne rencontre pas en mettant un order by dans votre requête.
Code:
       dcl-s compteur int(10);
       dcl-s nomp char(50);
       dcl-s nomv char(50);
       dcl-s code int(10);
       exec sql
        declare C1 cursor for
        select pr_code, pr_nom, vin_nom
        from bdvin1/producteur join bdvin1/vins using(pr_code, appel_code)
        order by pr_code;
        exec sql open c1;
        exec sql fetch c1 into :code, :nomp, :nomv;
        dow sqlcode = 0;
         compteur += 1;
         exec sql fetch c1 into :code, :nomp, :nomv;
        ENDDO;
       exec sql close c1;
       dsply (%char(compteur));
       *inLR = *on;


Merci pour le coup de main. Si je trouve l'explication, je la mettrai sur le post.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com

Anti Bot Question MOD - phpBB MOD against Spam Bots