Първо, почти винаги е по-ефективно да направите всичко в един израз, ако изобщо е възможно.
Втората ви заявка не работи, тъй като връщате всичко в един низ. Това не списък, разделен със запетая, както се изисква от оператор IN.
Има обаче малък трик, за да заобиколите това. Ако приемем, че използвате низа за нещо между двата оператора SELECT, можете да си поиграете с regexp_substr()
за да превърнете вашия низ в нещо използваемо.
Нещо подобно би свършило работа;
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
)
Променливата v_province
ще трябва да се промени, за да се цитира два пъти, например '''AB'',''AZ'',''BC'''
за да работи това.
Ето един работещ пример