ВОЗВРАЩЕНИЕ Oracle В ИСПОЛЬЗОВАНИЕ НА Java (JDBC, Подготовленный оператор)

используя JDBC для выполнения оператора Oracle, который выглядит следующим образом:

"INSERT INTO MYTABLE(MYDATA) VALUES(?) RETURNING MY_CALCULATED_DATA INTO ?"
// MYTABLE's def makes MY_CALCULATED_DATA be auto-generated by DB on insert

Я нашел несколько способов вызвать утверждение выше в Java, в основном:

Использование OraclePreparedStatement:

ps = (OraclePreparedStatement)conn.prepareStatement(sql);
ps.setString(1, "myvalue");
ps.registerReturnParameter(2, Types.VARCHAR);
ps.execute();
rs = ps.getReturnResultSet();
rs.next();
System.out.print(rs.getString(1));

Использование CallableStatement:

cs = conn.prepareCall(sql);
cs.setString(1, "myvalue");
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
System.out.print(cs.getString(1));
Вопросы:Метод № 2 бросков "SQLException: не все возвращаемые параметры зарегистрированы ",НО, если я оберну оператор SQL в "Begin..end;» - тогда метод № 2 работает просто отлично.Почему метод № 1 работает безbegin..end» но метод № 2 требует "begin..end» работать?Какого рода "магия» "begin..end» делает заявление так, чтобыне все параметры прописаны проблема вдруг решает сама?

Есть какой-то третий, лучший способ сделать выше?

Спасибо, AG.

Ответы на вопрос(2)

Ваш ответ на вопрос