package test.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
/**
* Oracleのネストした表をINパラメータにとるプロシージャをコールするサンプルです。
*/
public class CallProcWithNestabExample {
public static void main(String[] args) {
Connection conn = null;
CallableStatement st = null;
try {
// Oracle JDBC driverをロードします。
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@falcon.center.nsnhnkmmkk.co.jp:1521:ORCL",
"DEVUSER", "DEVPASS");
// ストアドプロシージャの実行文を解析
st = conn.prepareCall("{call TEST_PKG.GET_SUM(?, ?)}");
// 入力引数の値をセット
String[] values = {"18", "25", "104", "53", "29"};
ArrayDescriptor ad = new ArrayDescriptor("TEST_ARRAY", conn);
ARRAY array = new ARRAY(ad, conn, values);
//st.setObject(1, array, Types.ARRAY);
st.setArray(1, array);
// ↑はどちらでもOK
// 出力引数の型を指定
st.registerOutParameter(2, java.sql.Types.INTEGER);
// プロシージャの実行
st.execute();
// 結果の取得
int result = st.getInt(2);
System.out.println("result=" + result);
} catch (SQLException ex) {
System.out.println("Ootto! " + ex.getMessage());
ex.printStackTrace();
} finally {
if(st != null){
try { st.close(); } catch(SQLException e_){ }
}
if(conn != null){
try { conn.close(); } catch(SQLException e_){ }
}
}
}
}
|