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