Кажется, я не могу получить правильную волшебную комбинацию, чтобы сделать эту работу:
OracleDataSource ods = new oracle.jdbc.pool.OracleDataSource();
ods.setURL("jdbc:oracle:thin:app_user/pass@server:1521:sid");
DefaultContext conn = ods.getConnection();
CallableStatement st = conn.prepareCall("INSERT INTO tableA (some_id) VALUES (1) RETURNING ROWID INTO :rowid0");
st.registerReturnParameter(1, OracleTypes.ROWID);
st.execute();
Я получаю сообщение об ошибке «Нарушение протокола». Если я перейду на registerOutParameter(), я получу уведомление о том, что не зарегистрировал все возвращаемые переменные. Если я оберну оператор в начало PL/SQL; конец; block, то я отлично получаю параметр, используя обычный вызов registerOutParameter(). Я действительно предпочел бы не обертывать все мои операторы вставки в PL/SQL - так чего же не хватает выше?