1

PL / SQLパッケージで定義されたレコードタイプとプロシージャ(INパラメータとしてレコードのテーブルを受け取る)があります。このプロシージャをJavaコード内で呼び出すにはどうすればよいですか。

このタイプのINパラメータを避ける方が良いですか?多分REFカーソル?

4

1 に答える 1

2

通常の理由は、一時テーブルを使用することです。

0必要に応じて自動コミットをオフに設定します(デフォルトではオフになっています)

1いくつかの値を使用して一時テーブルに入力します。

2プロシージャを呼び出します。一時テーブルから値を読み取ります。(INパラメーターにレコードがありません)

3コミット

//A function to put a value in temporary table
public void addValueToTmp(Connection conn, String value)  throws NamingException, SQLException {
  CallableStatement cs = conn.prepareCall("{call plsql_function_put_value_in_tmp(?)}");
  ....... other code .......
  ....... other code .......
  ....... other code .......
}

//A function to do something whit a data in temporary table
public void doAllWork(Connection conn)  throws NamingException, SQLException {
  CallableStatement cs = conn.prepareCall("{call plsql_function_do_something_whith_tmp}");
  ....... other code .......
  ....... other code .......
  ....... other code .......
}


public void mainFunction() throws NamingException, SQLException {
  ....... other code .......
  //Get connection
  Connection conn = anyFunctionToGetConnection();
  //Fill temporary table
  addValueToTmp(conn, value1);
  addValueToTmp(conn, value2);
  addValueToTmp(conn, value3);
  //Do something whith data
  doAllWork(conn);
  //Commit
  conn.commit;
  ....... other code .......
}
于 2012-04-25T10:37:35.847 に答える