Сравнение столбца Date с sysdate дает: был обнаружен нечисловой символ там, где ожидалось число

У меня возникла странная проблема, когда сравнение столбца даты с SYSDATE дает следующую ошибку:

01858. 00000 -  "a non-numeric character was found where a numeric was expected"
*Cause:    The input data to be converted using a date format model was
           incorrect.  The input data did not contain a number where a number was
           required by the format model.
*Action:   Fix the input data or the date format model to make sure the
           elements match in number and type.  Then retry the operation.

Я воссоздаю МАТЕРИАЛИЗИРОВАННЫЙ ВИД; который включал некоторые незначительные изменения, и всякий раз, когда процесс прерывается, он всегда указывает на '> =' в следующем запросе производной таблицы:

SELECT id, 
  desc,
  start_date,
  end_date
 FROM T_LIPR_POLICY_ROLE TLPR
 WHERE end_date >= SYSDATE

Теперь end_date - это тип DATE, и я могу выполнить этот запрос сам по себе, но всякий раз, когда я пытаюсь запустить его в материализованном представлении, он всегда прерывается с ошибкой, указанной выше. Хотя на прошлой неделе мне удалось создать его с помощью того же запроса.

Любые идеи?

Спасибо,


person sonar    schedule 08.02.2013    source источник
comment
Можете ли вы опубликовать все соответствующие DDL? Возможно ли, что ваше материализованное представление было изменено, и оно больше не имеет тех же типов данных, что и запрос?   -  person Jon Heller    schedule 09.02.2013


Ответы (2)


Привет, я очень сожалею о долгой задержке. Я просто не мог опубликовать все заявление по соображениям безопасности.

Теперь вопрос решен. Проблема заключалась в том, что наш сценарий материализованного представления собирал данные из 17 разных мест через СОЮЗЫ. Теперь по какой-то причине ошибка указала на неправильную строку кода (см. Ниже).

SELECT id, 
 desc,
 start_date,
 end_date
FROM T_LIPR_POLICY_ROLE TLPR
WHERE end_date >= SYSDATE <-- ORACLE POINTS TO THIS LINE

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

to_date('  / 0/    ') <-- This was the cause of the problem.

Обратите внимание, что этот текст не был таким, как в реальном скрипте, он буквально сказал to_date (‹имя столбца типа varchar›), но 2 записи из 15 миллионов имели текст, указанный выше.

Я не совсем понимаю, почему Oracle указывает не на ту строку кода.

¿Это проблема Oracle? ¿Это проблема с SQL Developer? ¿Может ли это быть конфликт с подсказкой? Мы используем несколько таких: / * + PARALLEL (init 4) * /

Спасибо за твою помощь.

person sonar    schedule 14.02.2013
comment
Это была проблема разработчика SQL. Жаба точно сообщает место ошибки. - person sonar; 18.06.2013

Desc - это имя столбца? Если да, то вы используете зарезервированное ключевое слово desc в качестве имени столбца.

SELECT id, 
  desc,---- here
  start_date,
  end_date
 FROM T_LIPR_POLICY_ROLE TLPR
 WHERE end_date >= SYSDATE

Мы не можем использовать зарезервированные ключевые слова Oracle в именах столбцов.

Измените имя столбца.

person Abhishek kumar    schedule 09.02.2013
comment
Ой, извините за это. Это не настоящее имя столбца. Дело в том, что я могу нормально запустить запрос сам по себе. Просто всякий раз, когда я запускаю его как часть оператора CREATE MATERIALIZED VIEW, я получаю эту ошибку примерно через 15 минут после выполнения. - person sonar; 11.02.2013