运行以后不退出,数据库表中没有改变这是我写的存储过程create or replace procedure sp_pro1(spName varchar2,newSal number) is
begin
   update emp set sal=newSal where ename=spName;
end;
import java.sql.*;
public class TestOraProcedure { public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORA9I","scott","tiger");
//创建callablestatement
CallableStatement cs = conn.prepareCall("{call sp_pro1(?,?)}");
//给问好赋值
cs.setString(1, "SCOTT");
cs.setInt(2, 6666);
System.out.println("OK");
//执行
cs.execute();
cs.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    update emp set sal=newSal where ename=spName;
    我记错了吗?
    update emp set sal:=newSal where ename:=spName;
      

  2.   

    用jstack看一下是不是卡在 cs.execute();这一句了如果是的话就分析一下存储过程吧。
    先用plsql执行以下,看看效果
      

  3.   

    存储过程参数加IN 试试
    create or replace procedure sp_pro1(spName IN varchar2,newSal IN number) is
      

  4.   

    另外启用了事务的话,可能会被别的事物卡住比如你用plsql执行了一句 select * from  emp for update;
    那么这张表就被这个查询锁定了。这种情况下你的事务是执行不过去的。
      

  5.   

     CallableStatement cs = (OracleCallableStatement)conn.prepareCall("{call sp_pro1(?,?)}");
      

  6.   

    打开自动提交试试,如果不是的话就显式提交!DML语句要提交!
      

  7.   

    解决了 是要commit 多谢大家 散分了