【问题标题】:Java JDBC call to Oracle 10 function "invalid identifier"Java JDBC 调用 Oracle 10 函数“无效标识符”
【发布时间】:2012-02-25 12:24:04
【问题描述】:

我遇到了一个以前没有遇到过的问题:数据库中有一个存储函数:CC_PROC,它接受两个日期条目并返回一个表。换句话说,要调用它,请键入:

SELECT * FROM (TABLE( CC_PROC( DATE '2012-01-01', DATE '2012-01-15')));

这似乎在 SQLPlus 和 NetBeans 中完美运行,并且上面的行显然已经使用了一段时间。

无论如何,当使用准备好的语句从 java 调用它时,我得到:“CC_PROC”:executeQuery 调用上的无效标识符。

这是与:

PreparedStatement preparedStatement = 
     connection.prepareStatement("SELECT * FROM (TABLE ( CC_PROC( ? , ? )))");
preparedStatement.setDate(1,firstDate);
preparedStatement.setDate(2,secondDate);
resultSet = preparedStatement.executeQuery();

我觉得这可能是显而易见的,而我直接使用 JDBC 而不是 Hibernate 的有限经验让我大吃一惊。我不想在 Java 业务逻辑中重新编码 CC_PROC 的内容。有什么想法吗?

谢谢!

【问题讨论】:

  • 您现在是否尝试使用硬编码输入从 sqlplus 执行相同的操作?
  • 是的; prepareStatement("SELECT * FROM (TABLE (CC_PROC( DATE '2012-01-01' , DATE '2012-01-15' )))");执行后给出相同的错误。 ://
  • 这意味着发生了一些变化,可能在数据库(或)您的输入类型中。
  • 我不确定我是否在关注你;由于硬编码版本也不起作用,但它使用在 sqlplus 中起作用的相同字符串,这意味着什么?这不可能是 sql.Date 转换问题,因为硬编码版本明确命名了 DATE...
  • 可能是,我不确定我们是否可以在那里使用 DATE。尝试在此处删除 DATE。

标签: java stored-procedures jdbc oracle10g


【解决方案1】:

啊哈,找到答案了:

oracle 用户是 SALESOWN,因此修复方法是:

PreparedStatement preparedStatement = connection.prepareStatement(
        "SELECT * FROM (TABLE ( SALESOWN.CC_PROC( ? , ? )))");

哎呀。我不想承认解决这个问题所花费的时间。

显然 SQLPlus 和 NetBeans 确实试图提供一些帮助...

感谢大家的帮助!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多