Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Użycie select w ELSE instrukcji CASE daje mi ORA-00937:nie jest to funkcja grupy pojedynczej

Przyjmuję nieco inne podejście, ale wygląda na to, że działa.Zamiast wielkości liter i zliczania, po prostu sprawdź, czy agregacja ma wartość null (coalesce zwraca pierwszą niezerową wartość w serii) i czy zastępuje wiadomość. Pozwala to uniknąć grupowania drugiego poziomu, które moim zdaniem nie jest potrzebne.

Szkoda, że ​​listagg również nie obsługuje wyrazistości w agregacie; moglibyśmy uniknąć widoku wbudowanego.

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%'

Ma to narzut, ponieważ próbuje wygenerować listę użytkowników, których instrukcja case może próbować skrócić. Jeśli jednak w sesji V$ nie ma żadnych rekordów, wybór wyróżnienia powinien być szybki.

Chociaż szczerze mówiąc, nie jestem pewien, dlaczego musimy to robić. Null na liście jest zazwyczaj odpowiednią odpowiedzią wskazującą na brak użytkowników. a interfejs użytkownika obsłuży wartość null, co oznacza brak użytkowników.

Może być nawet szybciej, jeśli zastosujemy klauzulę WHERE do widoku wbudowanego.

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. Jak mogę połączyć ORACLE z programu EXCEL z JDBC?

  2. SQL:tworzenie tabel z kluczami podstawowymi i odniesieniami do kluczy obcych (

  3. Podziel wartości oddzielone przecinkami na kolumny w Oracle

  4. przekazać obiekt z Javy do procedury Oracle

  5. Nie udało się uzyskać/utworzyć połączenia z puli połączeń