Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle LISTAGG() para uso de consulta


Em primeiro lugar, é quase sempre mais eficiente fazer tudo em uma única instrução, se possível.

Sua segunda consulta não funciona, pois você está retornando tudo em uma única string. Isso não uma lista delimitada por vírgulas conforme exigido por uma instrução IN.

Há um pequeno truque para contornar isso embora. Supondo que você esteja usando a string para algo entre as duas instruções SELECT, você pode brincar com regexp_substr() para transformar sua corda em algo utilizável.

Algo assim funcionaria;
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
                  )

A variável v_province teria que ser alterado para ser citado duas vezes, por exemplo '''AB'',''AZ'',''BC''' para que isso funcione.

Aqui está um exemplo de trabalho