Nicholas Karasnovが言うように、プロシージャ宣言と一致するように呼び出しの引数が必要です。この場合、OUT
があります パラメータなので、選択したデータを移動する場所が必要です。これは、sys_refcursor
に対応するものです。 パラメータタイプ。
SQL * Plusを使用してこれをテストしている場合は、 SQL*Plus変数
このために、それをバインド変数として渡し、print
カーソルの内容を表示するコマンド:
variable rc refcursor
exec javao(1, :rc);
print rc
これはSQLDeveloperでも機能します。他のコードからプロシージャを呼び出すと、PL / SQLブロックまたは外部アプリケーション(jdbc
などを介して)で変数が宣言されます。 )、ただし、それらの詳細は、実行している内容によって異なります。
Javaから呼び出すには、次のようにします。
// get connection
CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
cStmt.setInt(1, 1);
cStmt.registerOutParameter(2, OracleTypes.cursor);
cStmt.execute();
ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
while (rSet.next())
{
// get columns from result set row and do something with the data
}
...しかし、これは擬似コードに隣接しているため、ドキュメントを読んで空白を埋め(エラーを修正します。たとえば、Oracle固有のステートメントタイプが必要になる可能性があります)、オブジェクトのクローズとエラー処理をすべて追加する必要があります。その他の良いもの。