错误 - 从Java

时间:2015-05-21 14:38:52

标签: java sql oracle function

我试图调用一个带有一个varchar输入参数的oracle函数并返回一个varchar。但它会引发以下错误。我尝试在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);

2 个答案:

答案 0 :(得分:2)

cstmt.setString(2, "12345678")给人的印象是参数中有两个。因此,将其更改为cstmt.setString(1, "12345678")

此外,它应该在cstmt.registerOutParameter之前,因为我们需要先设置输入参数然后再设置outparam。检查相同的教程。

编辑 - 您的输入参数类型(p_acct callid)看起来有问题。在功能中,检查它的类型。因此,在java中选择一个类型。

答案 1 :(得分:0)

尝试以下方法:

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();