oracle 异常返回值,oracle - java.sql.SQLException:无效的列类型:调用具有行类型返回值的函数时为1111 - 堆栈内存溢出...

我在一个名为“ MyPackage”的Oracle软件包中有一个函数:

FUNCTION MyFunction(name IN VARCHAR2) RETURN MyTable%rowtype;

我正在尝试通过JDBC调用它。

CallableStatement cs = connection.prepareCall("{ ? = call MyPackage.MyFunction(?) }");`

cs.registerOutParameter(1, OracleTypes.OTHER);

cs.setString(2, "SomeString");

cs.executeQuery();

我懂了

Caused by: java.sql.SQLException: Invalid column type: 1111

我尝试使用OracleTypes.CURSOR和OracleTypes.REF,但是都遇到了问题。 我想知道是否需要沿这些行定义一个STRUCT或其他内容,但是由于返回值不是命名类型,我认为我不能使用它吗?

我也尝试过:

SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate);

call.withCatalogName("MYPACKAGE")

.withFunctionName("MYFUNCTION");

SqlParameterSource paramMap = new MapSqlParameterSource()

.addValue("NAME", "SomeString");

Map map = call.execute(paramMap);

这还会产生Invalid column type 1111错误。 列元数据说该参数是OracleTypes.OTHER

我用来验证列元数据的代码是:

DatabaseMetaData dbMeta = connection.getMetaData();

ResultSet rs = dbMeta.getProcedureColumns(null, "MYSCHEMA", "%MY_FUNCTION%", "%");

while (rs.next()) {

String procedureName = rs.getString(3);

String columnName = rs.getString(4);

int dataType = rs.getInt(6);

System.out.println("Procedure Name: " + procedureName + ", Column Name: " + columnName + ", Data Type:" + dataType);

}

输出是:

Procedure Name: MYFUNCTION, Column Name: null, Data Type:1111

Procedure Name: MYFUNCTION, Column Name: NAME, Data Type:12

任何指导将不胜感激

你可能感兴趣的:(oracle,异常返回值)