Me parece que no puede obtener la combinación mágica derecho de hacer este trabajo:Volver ROWID de parámetros de instrucción de inserción usando la conexión JDBC para Oracle
OracleDataSource ods = new oracle.jdbc.pool.OracleDataSource();
ods.setURL("jdbc:oracle:thin:app_user/[email protected]: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();
El error que consigo es "Violación Protocolo". Si cambio a registerOutParameter(), me notifican que no he registrado todas las variables de devolución. Si envuelvo la declaración en un PL/SQL, empiece; fin; bloquear, entonces obtengo el parámetro muy bien usando una llamada normal registerOutParameter(). Realmente preferiría evitar envolver todas mis inserciones en PL/SQL, entonces, ¿qué falta desde arriba?
[@kaido ha proporcionado una solución preferible que no depende de la base de datos] (http://stackoverflow.com/questions/682539/return-rowid-parameter-from- insert-statement-using-jdbc-connection-to-oracle/881414 # 881414). –