En primer lugar, casi siempre es más eficiente hacer todo en una sola declaración si es posible.
Su segunda consulta no funciona ya que está devolviendo todo en una sola cadena. Esto es no una lista delimitada por comas como lo requiere una declaración IN.
Sin embargo, hay un pequeño truco para evitar esto. Suponiendo que está utilizando la cadena para algo entre las dos declaraciones SELECT, puede jugar con regexp_substr()
para convertir su cadena en algo utilizable.
Algo como esto funcionaría;
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
tendría que ser cambiado para ser citado dos veces, por ejemplo '''AB'',''AZ'',''BC'''
para que esto funcione.
Aquí hay un ejemplo de trabajo