在java中调用Oracle储存过程时,出现异常:java.sql.SQLException: ORA-00928: 缺失 SELECT 关键字
//java代码 @Test public void testProcedure(){ Connection conn = null; CallableStatement call = null ; try { conn = JDBCUtils.getconnection(); **call = conn.prepareCall("(call testprocedure(?,?,?))");** //in参数赋值 call.setInt(1,7839); //out参数声明 call.registerOutParameter(2,OracleTypes.VARCHAR); call.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER); //执行 call.execute(); //取出 String name = call.getString(2); float sal = call.getFloat(3); System.out.println("ename="+name+" sal="+sal); } catch (SQLException e) { e.printStackTrace(); }finally{ JDBCUtils.release(conn, call, null); } }错误出现在call.execute()。 错误原因为:call = conn.prepareCall(“(call testprocedure(?,?,?))”);语法写错
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name>[(<arg1>,<arg2>, ...)]}更改为 conn.prepareCall(“{call testprocedure(?,?,?)}“) 或者去掉括号 conn.prepareCall(“call testprocedure(?,?,?)”)
执行成功
ename=KING sal=7600.0