Utilizzando l'un char-fuso in un gruppo-by risultati clausola qualcosa di inaspettato:Oracle SQL - gruppo da char gettato
select cast(col as char(2)) from (
select 'Abc' as col from dual
union all
select 'Abc' as col from dual
) group by cast(col as char(10));
Il risultato è (lungo 10 caratteri) 'Abc '
. Intuitivamente, avrei aspettato Oracle per restituire una delle seguenti operazioni:
- Errore: 'non gruppo-by espressione', come il gruppo-by clausola è altro che la clausola selezione
- risultati di lunghezza 2
'Ab'
.
Sostituire cast(col as char(2))
con cast(col as char(3))
, Oracle restituisce un errore "non un'espressione di gruppo". Questo, di nuovo, è un comportamento molto strano.
Come può essere spiegato? Qual è la ragione dietro a questo?
Sto usando Oracle SQL 11g.
Ho appena testato su 11g e produce gli stessi risultati per i valori 1-11, tranne che per 3. Molto strano. Per me, questo sembra un insetto. Il ritorno dovrebbe essere "Ab". Il valore previsto viene restituito, se si utilizza una funzione di aggregazione. –
Lo stesso in Oracle 12 – sstan
Perché stai utilizzando il gruppo in una query che non utilizza la funzione di aggregazione? – scaisEdge