2009-11-18 96 views
0

我有點沮喪與我的Java環境,不允許我調用方法OraclePreparedStatement#setPlsqlIndexTable ...但我想我應該寫代碼之前。 ..Oracle和Jdbc和OraclePreparedStatement#setPlsqlIndexTable和java.util.Date

String plSqlBody = "some pl/sql procedure call" 
/* 
* The PL/SQL procedure parameter is here of type 
* TYPE t_date_table IS TABLE OF DATE INDEX BY PLS_INTEGER; 
*/ 
OracleCallableStatement ocs = (OracleCallableStatement) 
     conn.prepareCall(plSqlBody); 
java.util.Date[] date = new java.util.Date[10]; 
// Initialise the array... and then... 
ocs.setPlsqlIndexTable(index, date, 20, 20, OracleTypes.DATE, 20); 

,在這裏我得到我的例外:

java.sql.SQLException: Ungültiger PL/SQL-Indextabellen-Elementtyp 
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) 

我didn't找到解決問題的辦法。我將Java類型從java.util.Date更改爲java.sql.Date/oracle.sql.DATEOracleTypes.DATEOracleTypes.TIME/OracleTypes.TIMESTAMP,但沒有解決問題。我發現某處暗示,這些類型不允許在這裏,但我不能相信它。你知道這裏的正確方法嗎?

+1

'java.util.Date date = new java.util.Date [10]'不能編譯。請用編譯的代碼修改你的問題,否則很難看到有什麼問題。 – skaffman 2009-11-18 08:27:47

+0

它被修改。 – andrewinkler 2009-11-18 09:07:11

回答

1

從Oracle文檔(JDBC開發人員指南,JDBC OCI擴展章節):

甲骨文JDBC不支持RAWDATEPL/SQL RECORD爲元素類型。

也許你可以通過字符串/數字來傳遞日期嗎?

+0

似乎是這樣。 +1 – 2009-11-18 08:35:28

+0

這將是一個不舒服的解決方案。我不知道爲什麼Oracle的JDBC驅動程序不支持DATE。 我在C#項目中看到了同樣的問題。那裏的Oracle .NET驅動程序似乎允許將一個TIMESTAMP對象數組傳遞給過程。但我不是一個.NET專家。 – andrewinkler 2009-11-18 10:11:56