java获取存储过程响应

时间:2017-11-09 07:51:02

标签: java stored-procedures

如何在java中获取Store过程响应? 当我在SQL中运行它时,我得到一个响应

DECLARE
result NUMBER;
begin

  result := apps.xx01_cpc_ap_pkg.xx01_create_invoice_f(8309, 4795, 146.00);
  dbms_output.put_line(result);
end;

这是我的java代码 我尝试了很多选项 - 但我一直在努力获取如何获取响应 在这部分resultSet.getInt(4))

CallableStatement stmt = null;
String spCallRequest = "{? = call apps.xx01_cpc_ap_pkg.xx01_create_invoice_f(?, ?, ?  )}";
stmt = oraAppUtils.connection.prepareCall(spCallRequest);
stmt.setString(1,paymentRequest.healthFacilityCode);
stmt.setString(2,paymentRequest.batchId);               
stmt.setDouble(3,Double.parseDouble(paymentRequest.tariffAmount));
stmt.registerOutParameter(4, java.sql.Types.INTEGER);
resultSet = stmt.executeQuery();
System.out.println ("invoice id ="+resultSet.getInt(4));

2 个答案:

答案 0 :(得分:0)

TL; DR

您没有致电ResultSet#next()

<强>原因

来自关联的文档:

  

ResultSet游标最初位于第一行之前;该   首先调用方法接下来使第一行成为当前行;该   第二次调用使第二行成为当前行,依此类推。

<强>修正

您的代码应如下所示:

stmt.registerOutParameter(4, java.sql.Types.INTEGER);
resultSet = stmt.executeQuery();
if(resultSet.next()) {
    System.out.println ("invoice id ="+resultSet.getInt(4));
} else {
    //this should not happen
}

答案 1 :(得分:0)

好的 - 只是为了文档以防其他人需要它...这是SP它有一个功能

CREATE OR REPLACE PACKAGE APPS.XX01_CPC_AP_PKG
AS

PROCEDURE XX01_CREATE_INVOICE (P_HF_CODE IN VARCHAR2,
                               P_BATCH_ID IN VARCHAR2,
                               P_AMOUNT IN NUMBER,
                               x_invoice_id OUT NUMBER/*,
                               x_error_code OUT VARCHAR2,
                               x_error_msg  OUT VARCHAR2,
                               x_err_comments OUT VARCHAR2,
                               x_code OUT NUMBER,
                               x_source OUT VARCHAR2*/);

FUNCTION XX01_CREATE_INVOICE_F (P_HF_CODE IN VARCHAR2,
                               P_BATCH_ID IN VARCHAR2,
                               P_AMOUNT IN NUMBER) RETURN NUMBER;

所以原来我称之为功能 - 它没有用 - 我将代码更改为以下代码并且可以正常工作

String spCallRequest = "BEGIN  apps.xx01_cpc_ap_pkg.xx01_create_invoice(?, ?, ?,? ); END ; ";
stmt = oraAppUtils.connection.prepareCall(spCallRequest);
stmt.setString(1,paymentRequest.healthFacilityCode);
stmt.setString(2,paymentRequest.batchId);
stmt.setDouble(3,Double.parseDouble(paymentRequest.tariffAmount));
stmt.registerOutParameter(4, java.sql.Types.INTEGER);
stmt.execute();
System.out.println ("invoice id ="+stmt.getInt(4));
相关问题