【问题标题】:Java JDBC Oracle 9i upgrade to 10g issuesJava JDBC Oracle 9i 升级到 10g 问题
【发布时间】:2010-06-24 19:44:03
【问题描述】:

我们刚刚从 oracle 9i 升级到 10g,我使用 9i 客户端而不是 10g 进行了数据库查询。查询中没有任何变化。我收到以下错误:

java.sql.SQLException: ORA-01036: illegal variable name/number

不太清楚发生了什么。怎么就跑不动了。它只是一个连接大约 3 或 4 个表的 select 语句。我确保我使用 setInt 传递变量(这是我正在使用的数字)。在区分要加入的表时,我发现唯一不同的是,在一个表上,我要加入的列设置为一个表上的数字和另一个表上的 Number(12)。这有什么不同吗?查询仍在 TOAD 和 SQL Navigator 中运行...

【问题讨论】:

  • NUMBER vs NUMBER(12) 不是问题; NUMBER(12) 只定义小数点后的精度。不记得默认情况下 NUMBER 的精度是多少。
  • 是的,我有点猜到了,我只是把它扔到了那里,因为这真的不是我的领域,而且这里没有人知道从哪里开始,甚至不知道从哪里开始。谢谢。
  • 查看函数可能会有所帮助。

标签: java oracle jdbc ora-01036


【解决方案1】:

脑海中浮现2个想法:

  1. 确保您使用的是正确版本的 jdbc 驱动程序。由于您已经说过查询在 TOAD 等中有效,因此这很可能是您的问题。
  2. 确保您没有在查询中使用任何 ORACLE 关键字作为列别名等

此外,根据经验,如果您的数据库很大/很忙,那么在您的 10g 环境稳定之前,您还有很长的路要走。我的建议:

  1. 尽可能多地了解统计数据
  2. 阅读生存指南(网上有很多)
  3. 注意重新计算状态的内置作业。我们在上线 12 天后受到重创,因为统计数据更改破坏了关键查询性能。我们的测试不允许进行 12 天的稳定性测试。
  4. 如果您还没有绑定变量,请注意查看绑定变量

【讨论】:

    【解决方案2】:

    问题在于对准备好的语句的以下方法调用:

    ps.setEscapeProcessing(false);
    

    删除了它,现在它可以正常工作了。不要认为这与 oracle 10g 驱动程序兼容。感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2010-12-22
      • 2018-02-16
      相关资源
      最近更新 更多