间歇性ORA-00904 ::无效的标识符

时间:2011-02-03 10:41:11

标签: oracle jdbc ora-00904

有没有人知道什么可能导致固定查询(静态最终字符串)在大多数时间工作,然后间歇性地抛出以下错误:

  

内因: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 个答案:

答案 0 :(得分:1)

该声明是如何执行的? 如果存在某种形式的连接而不是可能导致问题的变量绑定。也许绑定值没有被定义,或者那里有一些垃圾值。

可能是错误来自执行MY_FUNC而不是调用语句。

答案 1 :(得分:0)

看起来像一种错误5355253,5458021,5717746等。 尝试刷新共享池,这在大多数情况下都有帮助。如果没有,您可以提供其他信息,如DBMS版本和平台。

答案 2 :(得分:0)

我在使用Oracle 10g和java时遇到了类似的问题,在以下行中使用PesonID导致错误。

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

但是当我使用以下内容时它工作正常。

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

所以关键是那些额外的引号。