0

我有以下(示例)查询,我正在尝试运行

SELECT some_field
FROM MY_VIEW
WHERE date_field >= TO_DATE('2011-06-22', 'yyyy-mm-dd')

当我在 SQL*Plus 中运行它时,我得到一组结果,当我尝试通过 JDBC(使用 java.sql.Statement)时,我得到以下错误:java.sql.SQLException: ORA-01722: invalid number

更奇怪的是,以下代码通过 JDBC 工作:

select field_1
FROM MY_VIEW v1
WHERE field_2 != 'some value'
AND not exists (
    SELECT field_1
    FROM MY_VIEW v2
    WHERE v1.field_1 = v2.field_1
    and t1.timestamp < t2.timestamp
)

但是下面的代码(在 SQL*Plus 中仍然有效)没有(同样的 ORA-01722 错误):

select field_1
FROM MY_VIEW v1
WHERE field_2 != 'some value'
AND not exists (
    SELECT field_1
    FROM MY_VIEW v2
    WHERE v1.field_1 = v2.field_1
    and v2.field_2 = 'some value'  -- Does not work with this line (same value as above)
    and v1.timestamp < v2.timestamp
)

我正在运行 Java 6,连接到 Oracle 10g,并使用 ojdbc14.jar。我认为重要的是要注意被查询的视图(MY_VIEW)是一件相当复杂的事情,包括将多个字段从 varchar 转换为 numeric。我目前的怀疑是 Oracle 正在为 jdbc 查询创建一个不同的、不可行的执行计划,而不是为 SQL*Plus。

关于我应该从这里做什么的任何建议?

谢谢。

4

0 回答 0