您可以按照Philipp的建議使用Oracle JDBC驅動程序中的對象。大多數用戶結束創建實用方法來包裝該邏輯。或者他們使用Spring映射器類。不過,還有很多手工工作要做。
另一種方法是使用即將發佈的012.版本的1.5.4--我正在開發的一個開源庫,其中數組均支持統一。所以,當你有你的類型:
type MyDoubles as varray(50000) of double precision
type MyStrings as varray(50000) of varchar2(2000)
然後jOOQ將生成類如
public class MyDoubles extends ArrayRecordImpl<Double> { /* ... */ }
public class MyStrings extends ArrayRecordImpl<String> { /* ... */ }
你的存儲過程可能是這樣的:
PROCEDURE MY_PROC1 (d IN MyDoubles, s IN MyStrings);
PROCEDURE MY_PROC2 (d IN MyDoubles, s OUT MyStrings);
PROCEDURE MY_PROC3 (d OUT MyDoubles, s OUT MyStrings);
而且jOOQ會產生另一個Java類如
public class Procedures {
// Invoke procedure MY_PROC on JDBC Connection c with VARRAY arguments
public static void myProc1(Connection c, MyDoubles d, MyStrings s);
// The OUT parameter is mapped to a method return value
public static MyStrings myProc2(Connection c, MyDoubles d);
// MyProc3 is a wrapper for both OUT parameters
public static MyProc3 myProc3(Connection c);
}
使用生成的代碼構件,使用UDT調用存儲過程,VARRAY參數非常容易。通過源代碼生成,您可以在數據庫模式中更改對象(例如,您的類型或您的過程),並且您的Java類將立即反映該更改。
退房在http://www.jooq.org/manual/META/PROCEDURE/手冊瞭解更多詳情
我能想到的原因 - 構建應用程序的陣列,通過陣列的PL/SQL程序使用FORALL執行批量PL/SQL操作。不過,我會使用'TABLE OF'和'VARRAY(50000)'來獲得靈活性,但這只是我。 – 2010-08-17 16:07:58
數據庫可以執行哪些操作,但無法在服務器端完成,而不會產生來回的網絡流量成本?如果這是一個長期運行的過程,我希望它是異步的,不管它在哪裏完成。仍然沒有意義。 – duffymo 2010-08-17 16:23:56