java呼叫oracle存盤程序入參是RECORD型別,如何呼叫?如果讓我改型別就請繞道,謝謝
uj5u.com熱心網友回復:
類似list格式[{'p_revealno':'12467_X1'},{'p_revealno':'12480_X1'}],試試?
uj5u.com熱心網友回復:
不行的,已經改成OBJECT來處理,RECORD是PLSQL的,ORACLE沒有物件來進行轉換
uj5u.com熱心網友回復:
可以外面套一層存盤程序,然后傳的引數是Java的資料型別,在這個存盤程序里面講傳進來的引數處理成record型別。uj5u.com熱心網友回復:
可以外面套一層存盤程序,然后傳的引數是Java的資料型別,在這個存盤程序里面講傳進來的引數處理成record型別。
最后還是改了型別處理,你的方式也可以
uj5u.com熱心網友回復:
不是改型別的要繞道,你跑到哪去了uj5u.com熱心網友回復:
/*---------------------------
# Perform the following SQL operations prior to running this sample
---------------------------
conn HR/hr;
create or replace package TEST_PKG is
type V_TYP is varray(10) of varchar2(200);
type R_TYP is record(c1 pls_integer, c2 varchar2(100));
procedure VARR_PROC(p1 in V_TYP, p2 OUT V_TYP);
procedure REC_PROC(p1 in R_TYP, p2 OUT R_TYP);
end;
/
create or replace package body TEST_PKG is
procedure VARR_PROC(p1 in V_TYP, p2 OUT V_TYP) is
begin
p2 := p1;
end;
procedure REC_PROC(p1 in R_TYP, p2 OUT R_TYP) is
begin
p2 := p1;
end;
end;
/
*/
import java.sql.Array;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Struct;
import java.sql.Types;
import oracle.jdbc.OracleConnection;
public class PLSQLTypesSample
{
public static void main(String[] args) throws SQLException
{
System.out.println("begin...");
Connection conn = null;
oracle.jdbc.pool.OracleDataSource ods = new oracle.jdbc.pool.OracleDataSource();
ods.setURL("jdbc:oracle:oci:localhost:5521:orcl");
ods.setUser("HR");
ods.setPassword("hr");
//get connection
conn = ods.getConnection();
//call procedure TEST_PKG.VARR_PROC
CallableStatement cstmt = null;
try {
cstmt = conn.prepareCall("{ call TEST_PKG.VARR_PROC(?,?) }");
//PLSQL VARRAY type binding
Array arr = ((OracleConnection)conn).createArray("TEST_PKG.V_TYP", new String[]{"A", "B"});
cstmt.setArray(1, arr);
cstmt.registerOutParameter(2, Types.ARRAY, "TEST_PKG.V_TYP");
cstmt.execute();
//get PLSQL VARRAY type out parameter value
Array outArr = cstmt.getArray(2);
//...
}
catch( Exception e) {
e.printStackTrace();
}finally {
if (cstmt != null)
cstmt.close();
}
//call procedure TEST_PKG.REC_PROC
try {
cstmt = conn.prepareCall("{ call TEST_PKG.REC_PROC(?,?) }");
//PLSQL RECORD type binding
Struct struct = conn.createStruct("TEST_PKG.R_TYP", new Object[]{12345, "B"});
cstmt.setObject(1, struct);
cstmt.registerOutParameter(2, Types.STRUCT, "TEST_PKG.R_TYP");
cstmt.execute();
//get PLSQL RECORD type out parameter value
Struct outStruct = (Struct)cstmt.getObject(2);
//...
}
catch( Exception e) {
e.printStackTrace();
}finally {
if (cstmt != null)
cstmt.close();
}
if (conn != null)
conn.close();
System.out.println("done!");
}
}
參考地址:https://docs.oracle.com/database/121/JJDBC/apxref.htm#JJDBC28913
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/19531.html
標籤:高級技術
