首页 > 解决方案 > Oracle 存储过程 INOUT ARRAY

问题描述

我有一个 INOUT 类型的 Oracle PLSQL 过程作为数组。我正在尝试使用 simpleJdbcCall.execute 方法进行调用。我收到此错误:

原因:java.sql.SQLException:无法转换为内部表示:{my_msg_tbl=org.springframework.data.jdbc.support.oracle.SqlArrayValue@3978894a}
at oracle.sql.ARRAY.toARRAY (ARRAY.java:230)
在 oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical (OraclePreparedStatement.java:8459)

这是plsql的详细信息

create or replace TYPE MY_ARRAY_TBL as table of varchar2(5000);
CREATE OR REPLACE PACKAGE MY_PROCEDURE AS
PROCEDURE GET_MY_RECORDS ( name VARCHAR2, my_msg_tbl IN OUT MY_ARRAY_TBL);
END MY_PROCEDURE;

Java 代码:简单的 JDBC 调用

simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
        .withCatalogName("MY_PROCEDURE")
        .withProcedureName("GET_MY_RECORDS")
        .withoutProcedureColumnMetaDataAccess()
        .declareParameters(new SqlParameter("name", Types.VARCHAR, "VARCHAR2"),
                           new SqlInOutParameter("my_msg_tbl", Types.ARRAY, "MY_ARRAY_TBL", new SqlReturnArray()));

过程调用:

String[] valueArr = new String[1];
valueArr[0] = "some-value";
simpleJdbcCall.execute(new MapSqlParameterSource("name","test"), Collections.singletonMap("my_msg_tbl", new SqlArrayValue(valueArr)));

有什么输入吗?

谢谢

标签: springstored-procedures

解决方案


推荐阅读