1

有谁知道是什么导致固定查询(静态最终字符串)大部分时间工作,然后间歇性地抛出以下错误:

内部原因: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 = ?))
4

3 回答 3

1

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

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

于 2011-02-03T22:45:11.727 回答
0

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

于 2011-02-03T11:47:04.173 回答
0

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

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

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

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

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

于 2011-02-16T20:55:53.053 回答