【问题标题】:How to pass an array of Java strings as CLOBS to an oracle stored procedure that takes an array of CLOBS如何将 Java 字符串数组作为 CLOBS 传递给采用 CLOBS 数组的 oracle 存储过程
【发布时间】:2017-09-22 15:51:39
【问题描述】:

我有一个 Oracle 存储过程,它接受一组需要使用 JDBC 从 Java 调用的 clob。我在我的 java 代码中有一个 Set 数据。 尝试了几种不同的方法,但似乎没有任何效果。任何人都有示例代码来执行此操作,请发布。

存储过程的开发人员定义了一个名为“CLOB_ARRAY”的自定义数据类型,它是一个 CLOBS 表。 当它是一个 VARCHAR 数组时,它可以正常工作。

【问题讨论】:

    标签: java oracle stored-procedures jdbc clob


    【解决方案1】:

    我找到了使用 Oracle 类型和结构的解决方法。以下是解决方案的摘要。 第1步: 创建如下类型 - 这必须使用 SQL Developer 或 SQL Plus 在数据库级别完成。不在包装内

    创建或替换 TYPE_DTAP_RECORD_STORE AS OBJECT(DATA_STORE_ID VARCHAR2(300), INDEX_RECORD CLOB);

    第 2 步: 在包中定义上述类型的数组 TYPE RECORD_ARRAY 是 BINARY_INTEGER 的 TYPE_DTAP_RECORD_STORE 索引表

    STEP 3 : 创建存储过程如下 程序baseline_record_insert_bulk(record_array中的i_record);

    第 4 步:

    在Java中,编写如下DAO方法来调用存储过程

    public void bulkAddToRecordStore(Map<String,String> jsonArray) throws SQLException {
    
        List<Object>recordList = new ArrayList<>(); 
        OracleConnection oraConnection = getConnection();
        OracleCallableStatement cs =(OracleCallableStatement) getConnection().prepareCall("BEGIN SCHEMA.PACKAGE.baseline_record_insert_bulk(?, ?); END;")
        for(String key :jsonArray.keySet()){
                Clob clob=oraConnection.createClob();
                clob.setString(1, jsonArray.get(key));
                Struct rec=oraConnection.createStruct("SCHEMA.TYPE_DTAP_RECORD_STORE", new Object[]{key,clob});
                recordList.add(rec);
            }
            Array sqlArray = oraConnection.createOracleArray("SCHEMA.PACKAGE.RECORD_ARRAY", recordList.toArray());
            cs.setObject(1, sqlArray);
            cs.execute();
            sqlArray.free();
            cs.close();
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 2012-02-10
      • 2014-04-16
      相关资源
      最近更新 更多