spring - 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)));
有什么输入吗?
谢谢
解决方案
推荐阅读
- matrix-synapse - 将 Intranet 中的 Matrix Synapse 服务器与 Internet 中的服务器桥接/克隆
- google-chrome - 如何在 VueJS 中使用 chrome 断点调试工具?
- java - 为什么我的 ArrayList 项目在消失时不会自行移除?
- asp.net - asp.net 用户成功登录后未通过身份验证并重定向到主页
- python - Flask 无法从目录中检索随机图片
- selenium - 例外:NoSuchElement 没有这样的元素
- angular - Angular Recursive HTTP Request 导致无限循环
- sql-server - 一列的输出只有两个十进制数字?
- python - Neo4j 密码查询以删除特定节点的子节点和孙节点
- postgresql - docker kong 错误获取与 postgres 的连接