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 异常返回值,oracle - java.sql.SQLException:无效的列类型:调用具有行类型返回值的函数时为1111 - 堆栈内存溢出...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中list是什么类型_Pyt
- 下一篇: mysql set语句_MySQL Pr