小编Suj*_*ang的帖子

从具有复杂输入和输出类型的JDBC调用Oracle存储过程

我在解决这个问题上非常接近,但我显然错过了一些东西.我的要求是从JDBC调用Oracle中的存储过程.存储过程将1个用户定义的Oracle对象作为INput,将另一个用户定义的Oracle对象作为OUTput.INput和OUTput对象混合了原始Oracle数据类型和另一组用户定义对象的集合.只要我为INput和OUTput对象中的集合类型设置NULL,我就能成功调用存储过程并返回结果.如果我尝试为Oracle对象列表创建ArrayDescriptor以将其发送到存储过程,我会不断遇到障碍.所以我需要帮助弄清楚如何将Array设置为INput对象并将其设置为CallableStatement.请注意,我知道如何将原始类型和数组作为直接输入发送到存储过程.但我不想这样做,因为我们以后必须向程序发送10个额外的字段,我不想将它们添加到方法签名中.这是课程列表.此外,下面的代码没有编译错误.

在oracle中打包:

CREATE OR REPLACE PACKAGE testPkg AS 
PROCEDURE spGetTestData (
TESTDATA_IN              IN            TESTDATA_IN_OBJ,
TESTDATA_OUT     OUT             TESTDATA_OUT_OBJ
);
END;
Run Code Online (Sandbox Code Playgroud)

存储过程的输入对象:

CREATE OR REPLACE TYPE TESTDATA_IN_OBJ AS OBJECT(
testStr1            VARCHAR2(5),
arrObj1             ARR_OBJ_1_NT);
Run Code Online (Sandbox Code Playgroud)

Array对象作为INput对象的一部分:

create or replace TYPE      ARR_OBJ_1_NT AS TABLE OF ARR_OBJ_1_OBJ;
Run Code Online (Sandbox Code Playgroud)

INput对象的UserDefined对象部分:

CREATE OR REPLACE TYPE ARR_OBJ_1_OBJ AS OBJECT
(
teststr         VARCHAR2(14),
testNumber   NUMBER(4),
);
Run Code Online (Sandbox Code Playgroud)

TestDataINObj.java:

    import java.sql.Array;
    import java.sql.SQLData;
    import java.sql.SQLException;
    import java.sql.SQLInput;
    import java.sql.SQLOutput;

    public class TestDataINObj implements SQLData
    {
 private String sql_type = "TESTDATA_IN_OBJ"; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures jdbc java-stored-procedures

5
推荐指数
1
解决办法
4884
查看次数