2012-02-02 85 views
2

我有我以前还没有遇到过一个问题:有一个数据库中的存储功能:CC_PROC,它有两个日期项,并返回一个表。换句话说,调用它,你键入:的Java JDBC调用甲骨文10功能“无效的标识符”

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直接代替休眠有限的经验是扔我。我不想在java业务逻辑中重新编写CC_PROC的内容。有任何想法吗?

谢谢!

+1

你现在尝试使用硬编码输入从sqlplus执行相同的操作吗? – kosa 2012-02-02 20:19:02

+0

是的; prepareStatement(“SELECT * FROM(TABLE(CC_PROC(DATE'2012-01-01',DATE'2012-01-15')))”);执行后会出现相同的错误。 :/ – Decker 2012-02-02 20:30:18

+0

这意味着更改了某些内容,可能是数据库(或)您的输入类型。 – kosa 2012-02-02 20:31:24

回答

1

啊哈,找到了答案:

Oracle用户是SALESOWN,所以修正为:

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

让人惊讶。我不想承认花费的时间。

显然的SQLPlus和NetBeans都试图帮助了一个小...

感谢您的帮助家伙!

+1

如果你能够做到这一点,最好只做一次:http://stackoverflow.com/questions/2353594/default-schema-in-oracle-connection-url。 'ALTER SESSION SET CURRENT_SCHEMA = SALESOWN' – 2012-02-02 21:07:40