在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