ВОЗВРАЩЕНИЕ 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)

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