Ora-904 ora-907 при використанні корелованих підзапитів, Oracle mechanics
Продуктивність СУБД та суміжні питання

ora-904 ora-907 при використанні корелованих підзапитів
З використанням корелированных підзапитів, тобто. підзапитів, результати яких використовуються для кожного рядка основного запиту - "a correlated subquery is evaluated once for each row", можуть зустрічаються помилки, що неточно пояснюють, що робиться неправильно
ora-904 "%s: invalid identifier"
ora-907 «missing right parenthesis»
Перша помилка ora-904 у разі correlated subquery за відсутності синтаксичних помилок повідомляє про використання більш ніж одного рівня глибини вкладеності (N-th level sub-query):
що не підтримується Oracle (до версії 11.1.0.7 включно) та стандартом SQL: ANSI SQL має table references (correlation names) scoped to just one level deep. Це пише віце-президент Oracle T.Kyte, відповідаючи на відповідне запитання "Іс there some sort of nesting limit for correlated subqueries?", тобто. офіційна інформація, з перших рук, приклад звідти ж. У документації Oracle, починаючи з 10.1, пишеться інакше:
Oracle виконає correlated subquery when a nested subquery references a column from a table referred to a parent statement any number of levels above the subquery
але це, мабуть, довгострокові плани Oracle.
тут проблема стара і відома: заборона використання ORDER BY в підзапитах, описана в документації Oracle 7 (у документації наступних версій не згадується — мабуть, також є плани по виправленню):
ORDER BY clause cannot appear in subqueries within інших statements.
За вищезазначеним посиланням на сайті asktom.oracle.com можна знайти приклад заміни конструкції з ORDER BY типу:
на аналітичнуфункцію типу:
для одночасного зниження рівня вкладеності підзапиту (correlated query level deep) до 1 та усунення проблеми з ORDER BY у підзапиті – конструкція dense_rank first ORDER BY допускається Oracle.