2009-09-09 32 views
2

我有一個訪問oracle存儲過程的Java應用程序。存儲過程的參數包括一個數組類型。我不喜歡它的下面...java - 在oracle存儲過程中傳遞數組

con = this._getConnection(); 
Connection narrowdConn = (Connection)WSJdbcUtil.getNativeConnection((WSJdbcConnection)con); 

callable = con.prepareCall("{call MY_PKG.MY_PROCEDURE(?, ?)}"); 


ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("VARCHAR2_ARR", narrowdConn); 
ARRAY arrayArg1 = new ARRAY(arrayDescriptor, con, docNames); 
ARRAY arrayArg2 = new ARRAY(arrayDescriptor, con, docTypes); 

callable.setArray(1, arrayArg1); 
callable.setArray(2, arrayArg2); 

callable.execute(); 

現在,我得到這個異常...

java.sql.SQLException: invalid name pattern: MY_PKG.VARCHAR2_ARR 

VARCHAR2_ARR是一個公共類型,Oracle包中定義如下所示:

TYPE VARCHAR2_ARR IS TABLE OF VARCHAR2(50);

而在我的存儲過程中使用這樣的...

PROCEDURE MY_PROCEDURE 
    (V_ARR_ARG1 IN VARCHAR2_ARR, 
    V_ARR_ARG2 IN VARCHAR2_ARR) 

回答

1

類型VARCHAR2_ARR是PLSQL類型,你將不能夠直接從Java接口它。我建議你看看this thread on AskTom關於類似的問題。

這裏有幾個建議:

  • 創建您可以從Java
  • 插入

綁定到一個臨時表從Java和讀取它PLSQL在這一個SQL TYPE您將不得不修改PLSQL過程或添加新的翻譯過程。

+0

實際上問題是,在一個包中創建的任何類型不是在Java可見accessToUnderlyingConnectionAllowed falg如此。如果我在模式級創建類型,那麼它就可以工作。 – coder 2009-09-10 06:09:20

+0

@編碼器:PLSQL類型不能直接從java訪問。您將不得不使用一個真正的SQL類型(CREATE類型...)和包含此SQL類型的包裝過程,或者修改您的過程以接受新類型。 – 2009-09-10 06:32:39

+0

如果我的理解正確,如果在一個包內聲明瞭一個類型,那麼它被稱爲PLSQL類型正確嗎?我很困惑,如果調用PLSQL類型失敗,jdbc如何成功調用在程序包內聲明和定義的過程。兩者有什麼區別? – 2011-06-02 08:52:12

0

我們需要設置在創建數據源

相關問題