存储过程:
create or replace procedure autoCreateEmployeeNumber(currentNumber out number)
as
begin
update tbl_auto_employee set auto_id=auto_id + 1;
select auto_id into currentNumber from tbl_auto_employee;
end;代码如下:
String procedure = "{call autoCreatePurchaseNumber(?)}";
try {
CallableStatement cstmt = session.connection().prepareCall(procedure);
cstmt.registerOutParameter(1, OracleTypes.NUMBER);
cstmt.execute();

System.out.println(cstmt.getString(1));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}如上,打印出的数字总是为1,应该是语句受影响行数吧
不明白为什么,希望给为予以解答,谢谢

解决方案 »

  1.   

    你的update语句没有设置条件啊!  你执行一次就去修改当前游标指针所在的行进行ID+1的运算!
      

  2.   

    我将存储过程修改成了如下格式,还是没用,我没用游标create or replace procedure autoCreateEmployeeNumber(currentNumber out number)
    as
    begin
    select auto_id into currentNumber from tbl_auto_employee;
    end;
      

  3.   

    我觉得是事物问题,一个存储过程其实是一个事物,在执行select时第一句的update并没有提交事物,查出来的还是原来的值,这种存储过程我其实写的没有什么意义create or replace procedure autoCreateEmployeeNumber(currentNumber out number)
    as
    begin
    select auto_id into currentNumber from tbl_auto_employee;
    currentNumber := currentNumber + 1;
    update tbl_auto_employee set auto_id = currentNumber;
    end;