Aller au contenu

[PL/SQL]conflit entre la clause IN et les VARCHAR2

Featured Replies

Posté(e)

bonjour,

J'ai un gros problème en PL/SQL (que je découvre plus ou moins en même temps).

J'ai une procédure qui reçoit un VARCHAR2 (une liste d'entier séparés par des virgules), et je dois mettre ceci dans la clause IN d'une requête SQL.

Sauf que ça marche bien évidemment pas, car il croit que c'est une chaine et non plusieurs entiers cote à cote.

Modifié par windu.2b

Posté(e)
  • Auteur

Bonsoir,

Tout d'abord merci de ta réponse et désolé pour le délai de la mienne : je n'ai pas pu consulter le site que tu proposes car le proxy de ma boite le bloquait. Je viens donc juste de lire tout cela à l'instant...

Mais malheureusement, cela ne répond pas à ma question ! La solution proposée renvoie une chaine de caractères, ok.

Sauf que ce dont j'ai besoin, c'est de récupérer une suite de valeur numérique, à placer directement dans un IN (...), ce qu'une requête imbriquée sait faire par exemple. Sauf que dans mon cas, c'est inenvisageable vu que les identifiants en question proviennent d'une table située sur une autre base de données.

Bon, en cherchant encore aujourd'hui, j'ai en fait trouvé une solution qui fonctionne mais qui n'est pas tout à fait comme prévue au départ.

En gros, au lieu d'avoir :

WHERE mon_champs IN (val1, val2, valN)

J'ai fait comme ceci :

WHERE varchar_val LIKE ('%mon_champs%')

Donc je passe par un LIKE qui va vérifier dans la chaîne des identifiants, mais j'ignore si tout ceci est plus ou moins consommateur en ressources ?

Bon, je mets le sujet en Résolu, vu que la solution que je donne fonctionne parfaitement. Merci bien, SyGEN :francais:

Posté(e)
  • Auteur
en gros, il faut que tu interprètes le CSV ?

Je ne vois pas très bien ce que le CSV vient faire dans l'histoire :chinois:

À moins qu'il ne s'agisse d'une abréviation qui n'a rien à voir avec le format de fichier ?

Posté(e)
  • Auteur
ben ton varchar, c'est bien une "liste d'entiers séparés par des virgules", non ? :francais:

Oui, mais non...

Si j'avais construit la requête dans un langage de programmation (ce que je faisais iniatelement en PHP), le problème ne se poserait pas.

Mais vu que je fais ça maintenant dans une procédure stockée (donc dans un package Oracle), cette subtilité ne marche bien évidemment plus.

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.