INパラメータを受け取り、 OUTカーソル パラメータを返すOracle PL/SQL プロシージャがあるとします。この手順を実行する jdbc コードがあります。
DataSource dataSource;
//datasource was set
CallableStatement statement = null;
ResultSet result = null;
ResultSet secondaryResult = null;
Connection connection = null;
try {
connection = dataSource.getConnection();
statement = connection.prepareCall("{? = call pl_sql_func(?)}");
statement.registerOutParameter(1, OracleTypes.CURSOR);
statement.setString(2,"param");
// !
secondaryResult = statement.executeQuery();
secondaryResult.close();
result = (ResultSet) statement.getObject(1);
while(result.next()){
//get some data
}
} catch (Exception ex){
}
finally{
//closing statement, result, secondaryResult and connection
}
このコードを実行してみると、secondaryResult にはデータがなく、result にはデータがあることがわかります。当たり前だけど誰か説明してくれ
1)statement.executeQuery()
実際に何を生み出すのか?
2) ステートメントがプロシージャー呼び出しを生成するときに、返される ResultSet にデータが含まれることはありますか? それとも常に空ですか?
PS可能な最適化は、この質問の目標ではありません。コードをそのまま説明してほしい。