ORA-00932 — несогласованные типы данных: ожидаемый ДЛИННЫЙ СИМВОЛ

#sql #oracle

#sql #Oracle

Вопрос:

Версия Oracle — 12.1.0.2

 Table name: PERSON_DATA

PD_PERSON - FLOAT(126)
PD_REMARK - LONG
PD_DATE   - DATE
  

У меня проблема с SQL-запросом, вызываемым кодом приложения. Там запрос выдает ошибку ORA-00932 — несовместимые типы данных: ожидаемый ДЛИННЫЙ СИМВОЛ.

Запрос выглядит следующим образом:

 select nvl(PD_REMARK, '') from PERSON_DATA;
  

Это должно быть как-то связано с тем, как Oracle обрабатывает » строку, как если бы она была изменена null , тогда она работает без проблем. Также странно то, что этот код работал до тех пор, пока несколько недель назад база данных Oracle не была переключена из резервного экземпляра. Это наводит меня на мысль, что это вызвано какой-то настройкой Oracle, но я просто не знаю, что именно.

Комментарии:

1. Похоже, это работает с db<>скрипкой: dbfiddle.uk /. ….

2. @GordonLinoff — Да, это работает с другими моими базами данных. Как я уже сказал, он отлично работал на другом экземпляре, прежде чем мы переключились (ODG) на текущий активный экземпляр.

3. В Oracle пустая строка ( '' ) совпадает со NULL значением. Использование NVL( pd_remark, '' ) совпадает с тем, NVL( pd_remark, NULL ) что совпадает с pd_remark (и не используется NVL вообще).

4. @MT0 Спасибо, и я подумал то же самое, однако, если вы измените оператор на select nvl(PD_REMARK, null) from PERSON_DATA; then, он будет работать нормально. Должен быть какой-то параметр или что-то, что влияет на то, как пустая строка используется в Oracle.