2011-02-03 82 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\"=?" 

所以關鍵是那些額外的引號。