1
我試圖創建一個簡單的例子來了解如何從/存儲,然後檢索(float數組)數據到Java程序到Oracle數據庫(11.2G簡單的例子)通過基於VARRAY的PL/SQL存儲過程。新手使用VARRAY與JDBC和PL/SQL存儲過程
我已經盡力把Java程序放在一起,但可能有一兩個錯誤。我也堅持寫如何編寫PL/SQL代碼來寫入然後從數據庫中讀取VARRAY。任何意見,將不勝感激。
Java程序:
// create example array
double[] myArray = new double[3];
myArray[0] = 1.1;
myArray[1] = 2.2;
myArray[2] = 3.3;
...
// setup call to stored procedure using SQL92 syntax
cs = conn.prepareCall("{call my_sproc (?,?)}");
// set IN parameters
cs.setString(1, myArray);
// set OUT parameters
cs.registerOutParameter(2, Types.ARRAY, "my_array");
// execute
cs.execute();
// retrieve array
double[] returnedArray = new double[3];
returnedArray = cs.getArray(2);
...
PL/SQL存儲過程:
create or replace procedure my_sproc (
input_array IN as VARRAY(3) of BINARY_FLOAT,
output_array OUT as VARRAY(3) of BINARY_FLOAT)
as
begin
-- how to write input_array into any example table?
-- how to read input_array from example table and store in variable: output_array?
end my_sproc;
感謝賈斯汀的元素的順序,在我的情況,我會永遠知道在Java數組的長度,我不感興趣的任何關係數組的方面(不需要搜索數組中的元素等)。所以我認爲VARRAY會盡量減少表格。由於數組中元素的順序很重要,上面的代碼是否應該創建另一個列(例如'order')來存儲元素在列中的順序? – ggkmath 2012-03-22 04:00:07
@ggkmath - 我更新了我的答案。使用嵌套表看起來與使用'VARRAY'完全相同,只是沒有硬編碼限制。我還展示了一個存儲索引的例子。 – 2012-03-22 04:09:49
太好了,謝謝Justin!如果我確實知道數組的長度,是否會首選使用varray而不是嵌套表,因爲可以預先定義內存分配?或者,由於某種原因嵌套表首選? – ggkmath 2012-03-22 04:18:04