Erstens ist es fast immer effizienter, alles möglichst in einer einzigen Anweisung zu erledigen.
Ihre zweite Abfrage funktioniert nicht, da Sie alles in einer einzigen Zeichenfolge zurückgeben. Das ist nicht eine kommagetrennte Liste, wie sie von einer IN-Anweisung verlangt wird.
Es gibt jedoch einen kleinen Trick, um dies zu umgehen. Angenommen, Sie verwenden die Zeichenfolge für etwas zwischen den beiden SELECT-Anweisungen, können Sie mit regexp_substr()
um Ihren String in etwas Brauchbares zu verwandeln.
So etwas würde funktionieren;
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
)
Die Variable v_province
müsste geändert werden, um zweimal in Anführungszeichen gesetzt zu werden, zum Beispiel '''AB'',''AZ'',''BC'''
damit das funktioniert.
Hier ist ein Arbeitsbeispiel