![](/img/trans.png)
[英]camel sql-stored java, cannot enter array as an input parameter for oracle stored-procedure
[英]Launch Oracle stored-procedure in Java code
我在Oracle中編寫了一個存儲過程,現在,我想用Java代碼啟動它。 我將描述一個問題。 我有一個對象類型:
TYPE PERSON_TYPE AS OBJECT (ID NUMBER(38), NAME VARCHAR2(20));
和表類型:
TYPE PERSON_TYPE_TABLE AS TABLE OF PERSON_TYPE;
我的程序看起來像這樣:
PROCEDURE EVALUATE_PERSON_PROC(P_PERSON_ID IN NUMBER, return_data OUT NOCOPY PERSON_TYPE_TABLE)
AS
--Some code
BEGIN
--Some code
END;
如何在Java代碼中啟動此過程? 哪個班級最好?
您需要使用CallableStatement類 :
String sql = "{call EVALUATE_PERSON_PROC(?, ?)}";
CallableStatement statement = connection.prepareCall(sql);
...
statement.execute();
為什么不使用Spring的DAO抽象 (一個非常有用且相當輕量級的原始JDBC 庫 ,不需要樣板代碼),你可以StoredProcedure
類。
class MySproc extends StoredProcedure {
public MySproc(DataSource ds) {
super(" { exec MY_SPROC ?, ? }", ds);
declare(new SqlParameter("p1", Types.VARCHAR));
declare(new SqlParameter("p2", Types.INT));
}
public void execute(String p1, int p2) {
Map m = new HashMap();
m.put("p1", p1);
m.put("p2", p2);
super.execute(m);
}
}
然后執行非常簡單如下:
new MySproc(ds).execute("Hello", 12);
沒有數據庫Connection
,可以在任何地方看到CallableStatement
。 可愛! 哦,是的,它還提供基於注釋的Transaction
。
如果您的sproc返回一個表,使用Spring非常容易。 簡單聲明:
declare(new SqlReturnResultSet("rs", mapper));
mapper
是將ResultSet
的一行轉換為所需對象的實例。 然后修改你的行:
Map out = super.execute(m);
return (Collection) out.get("rs");
返回的Collection
將包含mapper
實現創建的對象實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.