有没有人知道什么可能导致固定查询(静态最终字符串)在大多数时间工作,然后间歇性地抛出以下错误:
内因: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 = ?))
答案 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\"=?"
所以关键是那些额外的引号。