För det första är det nästan alltid mer effektivt att göra allt i ett enda uttalande om det alls är möjligt.
Din andra fråga fungerar inte eftersom du returnerar allt till en enda sträng. Detta är inte en kommaavgränsad lista som krävs av en IN-sats.
Det finns dock ett litet knep för att komma runt detta. Om du antar att du använder strängen för något mellan de två SELECT-satserna kan du leka med regexp_substr()
för att förvandla din sträng till något användbart.
Något sådant här skulle fungera;
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
)
Variabeln v_province
skulle behöva ändras för att citeras två gånger, till exempel '''AB'',''AZ'',''BC'''
för att detta ska fungera.
Här är ett fungerande exempel