Oracle的RETURNING INTO在Java中的使用(JDBC,Prepared Statement
发布时间:2020-12-12 13:48:51 所属栏目:百科 来源:网络整理
导读:我使用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中找到了几种方法来调用上面的语句,主要是: 使
我使用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”才能正常工作? >有没有第三,更好的做上述方法? 谢谢, 他们需要使用OraclePreparedStatement处理.在第二种情况下,当您将begin语句中的insert语句打包时,insert由数据库本身处理,并且jdbc看到的是一个匿名的plsql块. http://docs.oracle.com/cd/E11882_01/java.112/e16548/oraint.htm#BABJJDDA (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |