我遇到了一个以前没有遇到过的问题:数据库中有一个存储函数: CC_PROC,它接受两个日期条目并返回一个表。换句话说,要调用它,只需键入:
SELECT * FROM (TABLE( CC_PROC( DATE '2012-01-01', DATE '2012-01-15')));
这在SQLPlus和NetBeans中似乎工作得很好,而且上面这行显然已经使用了一段时间。
无论如何,当使用准备好的语句从java调用它时,我在executeQuery调用中得到:"CC_PROC":无效标识符。
这是通过:
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的内容进行重新编码。有什么想法吗?
谢谢!
发布于 2012-02-03 04:55:35
啊哈,找到答案了:
oracle用户是SALESOWN,因此修复方法是:
PreparedStatement preparedStatement = connection.prepareStatement(
"SELECT * FROM (TABLE ( SALESOWN.CC_PROC( ? , ? )))");
啊呀。我不想承认花了多少时间才弄明白这一点。
显然SQLPlus和NetBeans确实想帮点忙。
感谢大家的帮助!
https://stackoverflow.com/questions/9119262
复制相似问题