For det første er det næsten altid mere effektivt at gøre alt i en enkelt erklæring, hvis det overhovedet er muligt.
Din anden forespørgsel virker ikke, da du returnerer alt i en enkelt streng. Dette er ikke en kommasepareret liste som krævet af en IN-sætning.
Der er dog et lille trick for at komme uden om dette. Hvis du antager, at du bruger strengen til noget mellem de to SELECT-sætninger, kan du lege med regexp_substr()
at gøre din streng til noget brugbart.
Sådan noget ville virke;
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
)
Variablen v_province
skulle ændres for at blive citeret to gange, f.eks. '''AB'',''AZ'',''BC'''
for at dette kan virke.
Her er et fungerende eksempel