Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle LISTAGG() per l'utilizzo di query

In primo luogo, è quasi sempre più efficiente fare tutto in un'unica istruzione, se possibile.

La tua seconda query non funziona poiché stai restituendo tutto in una singola stringa. Questo non un elenco delimitato da virgole come richiesto da un'istruzione IN.

C'è un piccolo trucco per aggirare questo però. Supponendo che tu stia usando la stringa per qualcosa tra le due istruzioni SELECT puoi giocare con regexp_substr() per trasformare la tua stringa in qualcosa di utilizzabile.

Qualcosa del genere funzionerebbe;

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
                  )

La variabile v_province dovrebbe essere modificato per essere citato due volte, ad esempio '''AB'',''AZ'',''BC''' affinché funzioni.

Ecco un esempio funzionante