2009年6月24日水曜日

JavaでPL/SQLのパッケージに定義されているProcedureの呼び出す手順

JavaでPL/SQLのパッケージに定義されているProcedureの呼び出す手順:
1.該当Procedureを呼び出すSQL文の用意:
例:
String sql = "{ call PKG_TMP_RESULT.CREATE_TMP_RESULT(?,?) }";
説明:
①PKG_TMP_RESULT:PL/SQLのパッケージ名
②CREATE_TMP_RESULT:一時テーブルを作成するProcedure名
③"?":入力/出力パラメータ

2.DBに接続Connection対象の用意:
org.apache.commons.dbcp.DelegatingConnectionを使って、
Connectionオブジェクトを取得することをお勧め
※必要に応じて、特定なデータベース用のConnectionに転換する
例:
Connection tmpCon = ((DelegatingConnection)con).getInnermostDelegate();
oCon = (OracleConnection)tmpCon;

3.ストアドプロシージャを呼び出すためのCallableStatementオブジェクトを生成
※prepareCall(String sql)メソッドを使う
※必要に応じて、特定なDB用CallableStatementに変更
例:
CallableStatement stmt = oCon.prepareCall(sql);
OracleCallableStatement ostmt = (OracleCallableStatement)stmt;
※注意:
prepareStatement(String sql)は、パラメータ付きSQL文をデータベースに
送るためのPreparedStatementオブジェクトを作成します。

4.入力パラメータの設定:
CLOB clob = CLOB.createTemporary(oCon,true,oracle.sql.CLOB.DURATION_SESSION);
clob.setString(1, para1);
ostmt.setCLOB(1, clob);
説明:
①CLOB.createTemporary(java.sql.Connection conn,boolean cache,int duration)
該当メソッドは、一時のCLOBを作成
パラメータの意味:
cache - Specifies if LOB should be read into buffer cache or not.
duration - The duration of the temporary LOB.
The following are valid values: DURATION_SESSION, DURATION_CALL.
②clob.setString(long pos,String str)
指定するCLOBへ対象文字列をposの位置に書き込む
③ostmt.setCLOB(long pos,Clob clob)
oracle.sql.CLOBに指定位置でパラメータを含んでいるclob値を設定する

5.Procedureの実行結果を返す用出力パラメータの声明:
ostmt.registerOutParameter(2, Types.INTEGER);
※声明できるタイプ:
CHAR、VARCHAR、LONG、RAW、LONG RAW

6.ストアド・プロシージャの実行
ostmt.execute();

7.返すパラメータの取得:
ostmt.getXXX(long pos);
posは、パラメータのindex;
例:
int exec_stat = ostmt.getInt(2);

※補足:
Procedureの呼び出す側で指定したパラメータのindexは、
Procedureの定義側のindexと一致しないといけない

0 件のコメント: