2013-02-21 51 views
2

當我嘗試扔一個字符串數組,以Oracle存儲過程以oracle陣列:填充空數據在Java

String arrStr[] ={"val1","val2","val3"}; 
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("STR_ARRAY", connection); 

oracle.sql.ARRAY oracleArray = new oracle.sql.ARRAY(descriptor, connection, arrStr); 

oracleArray保持空數據,oracleArray.datumArray = {...,??? ,}

+0

STR_ARRAY的SQL定義是什麼? [這是一個工作示例](http://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%3a%3a%3aP11_QUESTION_ID:712625135727),你能在你的系統上重現這個例子嗎? – 2013-02-21 09:28:29

+0

這裏是在數據庫中創建類型的腳本: CREATE TYPE str_array AS TABLE VARCHAR2(40) – mega 2013-02-21 09:32:27

+0

你如何確定它保存空數據 - 用'oracleArray.dump()'查看Datum'元素從'oracleArray.getOracleArray()'...或其他? (因爲我不認爲你可以直接訪問'datumArray')。或者當您嘗試在您的過程中使用傳遞的數組時,Oracle端的值爲null - 在這種情況下,您可能還需要顯示該調用? – 2013-02-21 10:49:32

回答

4

在我的情況中(見上面我的評論),它是由編碼問題引起的,但沒有任何異常或調試信息。包括orai18n.jar到項目庫解決了這個問題......它真的很傷心,沒有任何異常或什麼可以指示如何解決問題

+1

很高興聽到你想到了這一點,並感謝發佈該解決方案.Oracle問題可能有點難以理解,甚至它會給你一個錯誤信息,但它並不總是準確或有幫助的+1 – 2013-09-16 18:12:12

+0

Awwww,man,這就是太酷了!這也是我的解決方案!你能解釋一下,爲什麼我們需要在classpath中使用orai18n.jar?它是如何影響我們的項目的? – 2013-10-09 12:33:25

0

經過幾個小時我創建了原因,真正的問題是NLS_CHARACTERSET的數據庫使用您的客戶端不支持的編碼工作,以便jdbc支持其他用戶.NLS_LANG必須在classpath中添加orai18n.jar。請參閱您的數據庫設置與此SQL:

SELECT * FROM NLS_DATABASE_PARAMETERS

0

可能是你STR_ARRAY是這樣定義的:

create or replace type STR_ARRAY is table of VARCHAR2(20);

正如托馬斯說,問題是編碼。我的解決方案 - 使用NVARCHAR2。

create or replace type STR_ARRAY is table of NVARCHAR2(20);