Uso RETURNING INTO do Oracle em Java (JDBC, Instrução Preparada)
Estou usando o JDBC para executar a instrução Oracle, que se parece com isso:
"INSERT INTO MYTABLE(MYDATA) VALUES(?) RETURNING MY_CALCULATED_DATA INTO ?"
// MYTABLE's def makes MY_CALCULATED_DATA be auto-generated by DB on insert
Eu encontrei várias maneiras de chamar a declaração acima em Java, principalmente:
Usando o 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));
Usando o CallableStatement:
cs = conn.prepareCall(sql);
cs.setString(1, "myvalue");
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
System.out.print(cs.getString(1));
Questões:Método # 2 lança"SQLException: Nem todos os parâmetros de retorno registrados", MAS, se eu envolver a instrução SQL em "BEGIN..END;"- então o método # 2 funciona muito bem.Por que o método # 1 funciona sem "BEGIN..END"mas o método # 2 requer"BEGIN..END" trabalhar?Que tipo de "mágica"?BEGIN..END"faz para a declaração para que" nem todos os parâmetros registrados "problema de repente resolve-se?Existe algum terceiro método melhor de fazer o acima?Obrigado AG.