ORA-01036: недопустимое имя / номер переменной с клиентом Oracle 18 и Oracle 19 Windows
После обновления Oracle 11/12 до 18/19 я получаю эту ошибку: ORA-01036: недопустимое имя / номер переменной.
Ошибка возникла в таком запросе:
SELECT * FROM (SELECT * FROM TABLE) MY_TABLE WHERE ROWNUM <= :P_ROWNUM
(Подзапрос + параметры привязки)
Идентичный запрос правильно работает с клиентом Oracle 11.2.0.4 или 12.1.0.2. Это не работает с Oracle Client 18c или 19c.
PS: Oracle Server - это версия 18c 64x для Windows.
Я использую Delphi 10.1.2 с компонентами ADO (dbGO). Я также пробовал с Delphi 13.3.3, но поведение такое же.
Похоже, проблема в провайдере Oracle OLE DB (ORAOLEDB).
Если я не использую ADO, а DevArt Unidac, все работает, как ожидалось.
Кто-нибудь может мне помочь?
Максимум
1 ответ
Ваш запрос в порядке. Мы столкнулись с аналогичной проблемой при переходе с версии 12.1 на версию 19. В нашем случае у нас есть собственный поставщик OLE DB, который взаимодействует с OraOLEDB (и другими) с помощью шаблонов поставщика Microsoft OLE DB (ATL). При попытке обновления с 12.1.x до 19c мы начали видеть странную и запутанную ошибку «ORA-01036: недопустимое имя/номер переменной» для параметризованных запросов SELECT. Запросы будут успешными при первом выполнении, но последующие выполнения завершатся ошибкой, когда все, что мы сделали, это изменили значение параметра (запросы выполнялись последовательно). Я пустился в погоню за дикими гусями, пытаясь диагностировать проблему, и в конце концов решил, что это какая-то ошибка кэширования Oracle. Вчерашний день, Я поэкспериментировал с атрибутами строки подключения, относящимися к кешу, и обнаружил, что добавление атрибута MetaDataCacheSize и установка его значения на 0 (ноль) решили проблему для нас. Похоже, что ни одно из текущих исправлений Oracle не решает эту проблему, по крайней мере, ни одно из тех, в которых упоминается ошибка ORA-01036.