2017-11-09 4 views
0

どのように私はストアプロシージャの応答をjavaで取得できますか?私は、これは私のJavaコード あるjavaストアドプロシージャの応答

DECLARE 
result NUMBER; 
begin 

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

私は応答を取得するSQLでこれを実行すると は、私は多くのオプションを試してみました - しかし、私はこの部分に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)); 

答えて

0

OK - 念のドキュメントのために他のいくつかは、それを必要とする...これは、それが機能

を持っている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)); 
0
を応答 を取得する方法に失敗し続けます

TL; DR

あなたは呼び出していませんでしたResultSet#next()

理由連結ドキュメントから

AのResultSetカーソルが最初に最初の行の前に配置されています。 メソッドへの最初の呼び出しによって、最初の行が現在の行になります。 2番目の呼び出しによって2番目の行が現在の行になります。以下同様です。

修正

あなたのコードは次のようになります。

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 
} 
+0

ありがとう - しかし、これは私が次のjava.sql.SQLExceptionを取得するのを助けていません:PLSQLステートメントでフェッチを実行することはできません:次へ – RMagen

関連する問題