Что может вызвать ORA-00936 - Отсутствует выражение со следующим sql?

Мы видим сообщение об ошибке ORA-00936 Missing Expression для следующего SQL:

Обратите внимание, что это всего лишь урезанная версия гораздо большего SQL-кода, поэтому переписать его во внутреннее объединение или подобное ему не совсем так:

Это SQL, который терпит неудачу:

select (select count(*) from gt_roster where ROS_ROSTERPLAN_ID = RPL_ID)
from gt_rosterplan
where RPL_ID = 432065061

Что я пробовал: * Извлечение самого внутреннего SQL и подстановка идентификатора из внешнего SQL дает мне число 12. * Псевдоним как подзапроса, так и количества (*) по отдельности, и оба одновременно не изменяют результат (т.е. все еще ошибка)

Что еще мне нужно посмотреть?

Выше приведены только таблицы, без представлений, RPL_ID является первичным ключом gt_rosterplan, а ROS_ROSTERPLAN_ID является внешним ключом для этого столбца, здесь в основном нет никакой магической или скрытой информации.


Изменить: В ответ на ответ, нет, здесь вам не нужны псевдонимы, поскольку столбцы имеют уникальные имена в таблицах.


Решено: Проблема заключалась в том, что на клиенте использовалась неверная версия драйвера клиента, 9.2.0.1, и с этой версией существуют известные проблемы.

2 ответа

Решение

Это должно работать, предполагая, что имена столбцов не являются неоднозначными (и даже если бы они были, это привело бы к другой ошибке). Я выполнил эквивалентное утверждение и получил результат без ошибок:

SQL> select (select count(*) from emp2 where empdeptno = deptno)
  2  from dept
  3  where deptno=10
  4  /

(SELECTCOUNT(*)FROMEMP2WHEREEMPDEPTNO=DEPTNO)
---------------------------------------------
                                            3

Похоже, что в Google есть или были ошибки Oracle, приводящие к ошибкам ORA-00936 - посмотрите это, например.

Проблема заключалась в том, что на клиенте использовалась неверная версия драйвера клиента, 9.2.0.1, и с этой версией существуют известные проблемы.

Другие вопросы по тегам