Em um SELECT DISTINCT com uma cláusula ORDER BY, se você especificar um valor no ORDER BY que não existe
na cláusula SELECT, o Oracle retornará a exceção ORA-01791: not a SELECTed expression
.
Veja esse exemplo:
SELECT DISTINCT item.name FROM item ORDER BY item.group_id
A coluna item.id
não está na cláusula SELECT, então o Oracle causará um ORA-01791. A versão corrigida pode ser:
SELECT DISTINCT item.name, item.group_id FROM item ORDER BY item.group_id
Se uma coluna na cláusula SELECT tem um alias, você também pode usar o alias na cláusula ORDER BY:
-- consultas válidas SELECT DISTINCT item.name AS full_name FROM item ORDER BY item.name; SELECT DISTINCT item.name AS full_name FROM item ORDER BY full_name;
Esteja ciente de que até a versão 11.2.0.4, o Oracle aceitava alguns valores incorretos em ORDER BY, como:
SELECT DISTINCT UPPER(item.name) AS full_name, item.group_id FROM item ORDER BY item.name -- deveria ser "UPPER(item.name)" ou "full_name"
Você deve corrigir as consultas para evitar problemas de compatibilidade com versões mais novas do Oracle.