gpt4 book ai didi

java - 使用 Java 的数组输出参数调用 Oracle 存储过程

转载 作者:行者123 更新时间:2023-11-30 10:06:39 24 4
gpt4 key购买 nike

我在从 Java 调用 plsql 过程时遇到问题。程序包如下:(架构 job_runner 和连接用户/方案不同):

create or replace package  test_package_for_sp as

type some_record_type is record
(
field_number number,
field_varchar2 varchar2 (128),
field_date date
);

type some_table_type is table of some_record_type;


procedure proc_table (p_card_bin in varchar2,
p_date in date default null,
p_out_table out some_table_type);
}

然后我尝试使用 callableStatement 从 Java 中调用它:

    final String typeTableList = "SOME_TABLE_TYPE";

CallableStatement cs = null;
try (Connection con = dataSource.getConnection()) {
con.setSchema("JOB_RUNNER");

cs = con.prepareCall("{call job_runner.test_package_for_sp.proc_table(?, ?, ?)}");

cs.setString(1, "54867321");
cs.setDate(2, Date.valueOf(ZonedDateTime.now().minusDays(200).toLocalDate()));
cs.registerOutParameter(3, Types.ARRAY, typeTableList);

cs.execute();
} finally {
if (cs != null)
cs.close();
}

错误引发:

java.sql.SQLException: invalid name pattern: <connection_scheme>.SOME_TABLE_TYPE

at oracle.jdbc.oracore.OracleTypeADT.initMetadata11_2(OracleTypeADT.java:764)
at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:479)
at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:443)

如果我将 typeTableLis 中的值从值 SOME_TABLE_TYPE 更改为包和方案的完整路径 JOB_RUNNER.TEST_PACKAGE_FOR_SP.SOME_TABLE_TYPE 异常更改为:

java.sql.SQLSyntaxErrorException: ORA-01948: identifier's name length (35) exceeds maximum (30)
ORA-06512: at "SYS.DBMS_PICKLER", line 18
ORA-06512: at "SYS.DBMS_PICKLER", line 58
ORA-06512: at line 1


at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)

有人知道如何从 java 中调用这个过程吗?

最佳答案

您可以将 JDBC 连接属性 "oracle.jdbc.createDescriptorUseCurrentSchemaForSchemaName" 设置为 "true",然后将模式切换为 "job_runner"(ALTER SESSION SET CURRENT_SCHEMA=job_runner)并使用 TEST_PACKAGE_FOR_SP.SOME_TABLE_TYP 作为 typeTableList。

关于java - 使用 Java 的数组输出参数调用 Oracle 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com