Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle LISTAGG() pour l'utilisation des requêtes

Premièrement, il est presque toujours plus efficace de tout faire dans une seule instruction si possible.

Votre deuxième requête ne fonctionne pas car vous renvoyez tout dans une seule chaîne. Ce n'est pas une liste délimitée par des virgules comme requis par une instruction IN.

Il y a cependant une petite astuce pour contourner ce problème. En supposant que vous utilisez la chaîne pour quelque chose entre les deux instructions SELECT, vous pouvez jouer avec regexp_substr() pour transformer votre chaîne en quelque chose d'utilisable.

Quelque chose comme ça fonctionnerait ;

select city
  from vwpersonprimaryaddress
 where state in ( 
           select regexp_substr(v_province,'[^'',]+', 1, level) 
             from dual
          connect by regexp_substr(v_province, '[^'',]+', 1, level) is not null
                  )

La variable v_province devrait être modifié pour être entre guillemets deux fois, par exemple '''AB'',''AZ'',''BC''' pour que cela fonctionne.

Voici un exemple de travail