Прерывистый ORA-00904:: неверный идентификатор - PullRequest
1 голос
/ 03 февраля 2011

Кто-нибудь знает, что может быть причиной того, что фиксированный запрос (статическая конечная строка) работает большую часть времени, а затем периодически выдает следующую ошибку:

Внутренняя причина: java.sql.SQLException:ORA-00904:: неверный идентификатор

Запрос выполняется через соединение JDBC.

Любопытно, что идентификатор пустой, и, конечно же, запрос работаетс перерывами.Если я возьму sql, который вышел из системы, и запустю его через plsql developer, то все будет нормально.

Есть идеи?

Вот запрос.Это было скрыто по соображениям безопасности.

    SELECT b.field1,
       b.field2,
       b.field3,
       my_func(b.field4, ?, nvl2(b.field5, 1, 0)) cardnumber,
       b.field6,
       b.field7,
       b.field8,
       b.field9,
       b.field10,
       b.field11,
       b.field12,
       b.field13,
       b.field14,
       b.field15,
       b.field16,
       b.field17,
       b.field18,
       b.field19,
       b.field20,
       b.field21,
       b.field22,
       b.field23,
       b.field24,
       b.field25,
       b.field26,
       my_func(b.field27, ?, nvl2(b.field28, 1, 0)) account_number,
       b.field29,
       s.field30 source_name,
       b.field31
  from table1 b
  left join table2 s
    on b.source_id = s.source_id
 where b.fieldx in
       (select fieldx from tablex where fieldy = ?)
   and customer_id = ?
   and state not in (7, 12, 1, 3, 13)
UNION
SELECT b.field1,
       b.field2,
       b.field3,
       my_func(b.field4, ?, nvl2(b.field5, 1, 0)) cardnumber,
       b.field6,
       b.field7,
       b.field8,
       b.field9,
       b.field10,
       b.field11,
       b.field12,
       b.field13,
       b.field14,
       b.field15,
       b.field16,
       b.field17,
       b.field18,
       b.field19,
       b.field20,
       b.field21,
       b.field22,
       b.field23,
       b.field24,
       b.field25,
       b.field26,
       my_func(b.field27, ?, nvl2(b.field28, 1, 0)) account_number,
       b.field29,
       s.field30 source_name,
       b.field31
   from table1 b
   left join table2 s
    on b.source_id = s.source_id
   where b.field3 in
       (select fieldx from table7 where fieldy = ?)
   and customer_id = ?
   and state in (1, 3)
   AND (b.field1 not in
       (select b.fieldx
           from table1 b,
                table3 sb,
                table4 sba
          where b.source_id = sb.source_id
            and sb.attribute_id = sba.attribute_id
            and sba.name = 'HIDE_IN_MENU'
            and b.customer_id = ?))

Ответы [ 3 ]

1 голос
/ 04 февраля 2011

Как выполняется оператор?Если есть некоторая форма конкатенации, а не связывания переменных, которые могут вызвать проблему.Возможно, значения привязки не определены, или там есть некоторые ненужные значения.

Возможно, ошибка связана с выполнением MY_FUNC, а не с оператором вызова.

0 голосов
/ 16 февраля 2011

У меня была похожая проблема с использованием Oracle 10g и java, использование PesonID в следующей строке вызывало ошибку.

 String sql= "SELECT * FROM Person where PersonID=?"          

но когда я использовал следующее, все работало нормально.

String sql = "SELECT * FROM Person where \"PersonID\"=?"

так что ключ к этим дополнительным кавычкам.

0 голосов
/ 03 февраля 2011

Похоже на вид жучков 5355253, 5458021, 5717746 и т. Д. Попробуйте очистить общий пул, это помогает в большинстве случаев. Если это не так, вы можете предоставить дополнительную информацию, такую ​​как версия СУБД и платформа.

...