[英]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.