2011-02-03 39 views
1

有谁知道这可能是导致固定查询(静态最终字符串)工作的大部分时间,然后间歇性地抛出了以下错误:间歇ORA-00904:无效的标识符

Inner cause: java.sql.SQLException: ORA-00904: : invalid identifier

的查询通过JDBC连接运行。

这里好奇的是标识符是空的,当然查询是间歇性的。如果我将已注销的sql并通过plsql开发人员运行,它一切正常。

任何想法?

以下是查询。出于安全原因,它已被混淆。

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 = ?)) 
+0

你可以发布sql吗? – gnuchu 2011-02-03 10:45:41

+0

你能让我们识别你的标识符吗 – V4Vendetta 2011-02-03 10:48:26

+0

添加了一个混淆版本的sql – Ellis 2011-02-03 11:06:26

回答

0

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

1

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

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

0

我有一个类似的问题使用Oracle 10g和Java,PesonID在以下行中的使用导致了错误。

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

但是,当我用下面它工作正常。

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

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