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

Menggunakan pilih di ELSE dari pernyataan CASE memberi saya ORA-00937:bukan fungsi grup grup tunggal

Mengambil pendekatan yang sedikit berbeda tetapi tampaknya berhasil. Alih-alih menggunakan huruf besar dan menghitung, cukup periksa apakah agregatnya nol (gabungan mengembalikan nilai non-null pertama dalam rangkaian) dan jika itu adalah pengganti pesan Anda. Ini menghindari pengelompokan tingkat 2 yang menurut saya tidak diperlukan.

Sayang sekali listagg tidak mendukung perbedaan dalam agregat juga; kita bisa menghindari tampilan sebaris.

SELECT coalesce(listagg(A.osuser, ', ') within group (order by A.osuser), 
                'There are no users connected') as userList
FROM (select distinct osuser from v$session) A
WHERE A.osuser!= 'SYSTEM' and A.osuser not like 'VMCONFTEST%'

Ini memang memiliki overhead karena mencoba menghasilkan daftar pengguna yang pernyataan kasus Anda mungkin mencoba untuk korsleting. Namun jika tidak ada record dalam V$session, pemilihan perbedaan harus dilakukan dengan cepat.

Meskipun sejujurnya saya tidak yakin mengapa kita perlu melakukan ini. Null dalam daftar umumnya merupakan respons yang memadai yang menunjukkan tidak ada pengguna. dan UI akan menangani null yang berarti tidak ada pengguna.

Bahkan mungkin lebih cepat jika kita menambahkan klausa where ke tampilan inline..

SELECT coalesce(listagg(A.osuser, ', ') within group (order by A.osuser), 
                'There are no users connected') as userList
FROM (SELECT distinct osuser 
      FROM v$session
      WHERE A.osuser!= 'SYSTEM' 
        and A.osuser not like 'VMCONFTEST%') A


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL Terhubung Dengan Logika

  2. Menyimpan Array yang dapat dicari di bidang database SQL

  3. menginstal Oracle Instantclient di Linux tanpa mengatur variabel lingkungan?

  4. sqlldr.exe tidak berfungsi untuk Windows 10

  5. Cara Mengonversi Desimal ke Heksadesimal menggunakan TO_CHAR() di Oracle