簡體   English   中英

錯誤-從Java調用Oracle函數

[英]Error - Calling Oracle function from Java

我正在嘗試調用一個使用一個varchar輸入參數並返回varchar的oracle函數。 但這會引發以下錯誤。 我曾嘗試在Java中將類型從varchar更改為nvarchar,但沒有幫助。

 java.sql.SQLException: ORA-06550: line 1, column 13:
 PLS-00306: wrong number or types of arguments in call to 'GET_DATA_TEST'

PLSQL函數定義

 create or replace FUNCTION     Get_Data_test (p_acct callid)
  RETURN VARCHAR2 
  AS

Java函數:

        String call = "{ ? = call Get_Data_test(?)}";
        CallableStatement cstmt = con.prepareCall(call);
        cstmt.setQueryTimeout(1800);
        cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.VARCHAR);
        cstmt.setString(2, "12345678");
        cstmt.executeQuery();
        name = cstmt.getString(1);
        System.out.println("hello: "+name);

cstmt.setString(2, "12345678")給人的印象是參數中有兩個。 因此,將cstmt.setString(1, "12345678")更改為cstmt.setString(1, "12345678")

另外,它應該在cstmt.registerOutParameter之前,因為我們需要先設置輸入參數,然后再設置outparam。 查看相同的教程。

編輯 -看起來您的輸入參數類型(p_acct callid)有問題。 在功能上,檢查它的類型。 在Java中相應地選擇一個類型。

嘗試以下方法:

String sequenceQuery;

sequenceQuery = "{call Get_Data_test(?,?)}";  // where ?'s are the parameters

connection = DataSourceLocator.getInstance().getDataSource().getConnection();
callableStatement = connection.prepareCall(sequenceQuery);

callableStatement.registerOutParameter(1, OracleTypes.VARCHAR);

callableStatement.setString(2,"12345678");

callableStatement.execute();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM