存储过程输出总是返回 0.0

Posted

技术标签:

【中文标题】存储过程输出总是返回 0.0【英文标题】:stored procedure out return always 0.0 【发布时间】:2013-01-17 12:07:41 【问题描述】:

我是 jdbc 的新手,我的程序总是返回 0.0...帮助

 CallableStatement cs= con.prepareCall(" call  getbalance(?,?) ");
    cs.setInt(1, 1234);
    //cs.setString(2, "dfdf");
    cs.registerOutParameter(2, Types.DOUBLE,23);
    cs.execute();
    System.out.println("Balance is "+ cs.getDouble(2));

             CREATE PROCEDURE `getbalance`( acno int, out amt int)
              begin 
                       select bal * amt from bank WHERE accno=acno; 
               end;

【问题讨论】:

【参考方案1】:

我认为你需要这个,将值设置为 amt 变量。

Set amt = (select bal * amt from bank WHERE accno=acno); 

【讨论】:

【参考方案2】:

设置参数,账号是多少?是 1 还是 1234?

cs.setInt(1, 1234);

您输入的 acno 可能没有记录...

您已输入,

select bal * amt from bank WHERE accno=acno; 

不应该是下面的,给定你有输入和输出参数

select bal INTO amt from bank WHERE accno=acno; 

编辑后的 ​​SP 将是:

CREATE PROCEDURE `getbalance`( IN acno int, OUT amt int)
 AS
    BEGIN 
                 SELECT bal INTO amt FROM bank WHERE accno=acno; 
    END;

【讨论】:

1 是参数的索引,1234 是传递的值 cs.setInt(1, 1234) 是绝对正确的。该语句中没有索引为 1234 的参数。 天哪!让那部分感到困惑。但是,如果这是 OP 打算做的,那么在答案中设置 out 参数和 rest 是正确的。将 Bal 乘以 amt 将返回零。 :-)

以上是关于存储过程输出总是返回 0.0的主要内容,如果未能解决你的问题,请参考以下文章

Spring的存储过程-从过程返回的结果总是空的

oracle存储过程如何输出结果集

通过ajax返回存储过程输出

存储过程输出参数返回舍入值

如何使用sqlplus在shell中存储存储过程返回的多个输出列

从存储过程调用返回变量作为变量的输出值