Обновление Java JDBC Oracle 9i до 10g

Мы только что обновились с oracle 9i до 10g, и запрос к базе данных, который у меня есть, работает с клиентом 9i, но не с 10g. В запросе ничего не изменилось. Я получаю следующую ошибку:

java.sql.SQLException: ORA-01036: illegal variable name/number

Не совсем уверен, что происходит. Почему бы ему больше не запуститься. Это просто оператор выбора, который объединяет около 3 или 4 таблиц. Я удостоверяюсь, что передаю переменную с помощью setInt (это число, которое я использую). При различии соединяемых таблиц единственное, что я нахожу отличающимся, это то, что в одной таблице столбец, к которому я присоединяюсь, установлен как число в одной таблице и число (12) в другой. Это имеет значение? Запрос по-прежнему выполняется в TOAD и SQL Navigator...


person user16208    schedule 24.06.2010    source источник
comment
ЧИСЛО против ЧИСЛА (12) не является проблемой; NUMBER(12) просто определяет точность после запятой. Не могу вспомнить точность по умолчанию для NUMBER.   -  person OMG Ponies    schedule 24.06.2010
comment
Да, я как бы догадался об этом, я просто выбросил это туда, потому что это действительно не моя область, и никто здесь не имеет ни малейшего понятия или даже представления о том, с чего начать. благодаря.   -  person user16208    schedule 24.06.2010
comment
Просмотр функции может помочь.   -  person OMG Ponies    schedule 25.06.2010


Ответы (2)


На ум приходят 2 мысли:

  1. убедитесь, что вы используете правильную версию драйвера jdbc. Поскольку вы сказали, что запрос работает в TOAD и т. д., скорее всего, это ваша проблема.
  2. убедитесь, что вы не используете ключевые слова ORACLE в своем запросе в качестве псевдонимов столбцов и т. д.

Кроме того, по опыту, если ваша база данных большая/занятая, у вас есть хороший путь, прежде чем ваша среда 10g станет стабильной. Мои рекомендации:

  1. узнать как можно больше о статистике
  2. Читайте руководства по выживанию (их много в сети)
  3. следите за встроенными заданиями, которые повторно вычисляют статус. Через 12 дней после запуска мы потерпели неудачу, потому что изменения в статистике нарушили производительность ключевых запросов. Наше тестирование не позволило провести 12-дневный тест на стабильность.
  4. помните о bind-variable-peeking, если вы еще этого не сделали
person Paul Jowett    schedule 25.06.2010

Проблема заключалась в следующем вызове метода для подготовленного оператора:

ps.setEscapeProcessing(false);

Удалил это и теперь работает нормально. Не думайте, что это было совместимо с драйвером oracle 10g. Спасибо всем за помощь.

person user16208    schedule 25.06.2010