sql >> Base de Datos >  >> RDS >> Oracle

Oracle LISTAGG() para consultar el uso

En primer lugar, casi siempre es más eficiente hacer todo en una sola declaración si es posible.

Su segunda consulta no funciona ya que está devolviendo todo en una sola cadena. Esto es no una lista delimitada por comas como lo requiere una declaración IN.

Sin embargo, hay un pequeño truco para evitar esto. Suponiendo que está utilizando la cadena para algo entre las dos declaraciones SELECT, puede jugar con regexp_substr() para convertir su cadena en algo utilizable.

Algo como esto funcionaría;

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 variable v_province tendría que ser cambiado para ser citado dos veces, por ejemplo '''AB'',''AZ'',''BC''' para que esto funcione.

Aquí hay un ejemplo de trabajo