Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle LISTAGG() untuk penggunaan kueri

Pertama, hampir selalu lebih efisien untuk melakukan semuanya dalam satu pernyataan jika memungkinkan.

Kueri kedua Anda tidak berfungsi karena Anda mengembalikan semuanya ke dalam satu string. Ini bukan daftar yang dipisahkan koma seperti yang disyaratkan oleh pernyataan IN.

Ada sedikit trik untuk menyiasatinya. Dengan asumsi Anda menggunakan string untuk sesuatu di antara dua pernyataan SELECT, Anda dapat bermain-main dengan regexp_substr() untuk mengubah string Anda menjadi sesuatu yang berguna.

Sesuatu seperti ini akan berhasil;

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
                  )

Variabel v_province harus diubah untuk dikutip dua kali, misalnya '''AB'',''AZ'',''BC''' agar ini berhasil.

Berikut adalah contoh kerja



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL:Kesalahan PLS-00306:nomor atau jenis argumen yang salah saat dipanggil untuk dipicu untuk tabel angka

  2. Membuat atribut baru di database Oracle dari dua atribut lainnya

  3. Secara otomatis mengatur nilai awal urutan Oracle

  4. kueri oracle sql untuk catatan dengan stempel waktu yang berada di antara dua stempel waktu

  5. Kesalahan SQL:ORA-02000:kata kunci SELALU hilang saat membuat tabel berbasis kolom identitas