Ten eerste is het bijna altijd efficiënter om alles in één verklaring te doen, indien mogelijk.
Uw tweede query werkt niet omdat u alles in een enkele tekenreeks retourneert. Dit is niet een door komma's gescheiden lijst zoals vereist door een IN-statement.
Er is echter een klein trucje om dit te omzeilen. Ervan uitgaande dat je de string gebruikt voor iets tussen de twee SELECT-instructies, kun je spelen met regexp_substr()
om van je string iets bruikbaars te maken.
Zoiets zou werken;
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
)
De variabele v_province
zou moeten worden gewijzigd om twee keer geciteerd te worden, bijvoorbeeld '''AB'',''AZ'',''BC'''
om dit te laten werken.
Hier is een werkvoorbeeld