2017-09-22 13 views
-1

JDBC를 사용하여 Java에서 호출해야하는 clob의 배열을 사용하는 Oracle 저장 프로 시저가 있습니다. 내 자바 코드에서 집합으로 데이터가 있습니다. 몇 가지 다른 접근 방식을 시도했지만 아무 것도 작동하지 않는 것 같습니다. 누구든지이 작업을 수행 할 수있는 샘플 코드를 가지고 있습니다. 게시하십시오.CLOBS로 Java 문자열의 배열을 CLOB의 배열을 사용하는 oracle 저장 프로 시저에 전달하는 방법

저장 프로 시저의 개발자는 CLOB 테이블 인 "CLOB_ARRAY"라는 사용자 지정 데이터 형식을 정의했습니다. VARCHAR의 배열 일 때 잘 동작합니다.

답변

0

Oracle Type 및 Struct를 사용하여 해결 방법을 찾았습니다. 아래는 솔루션의 요약입니다. 1 단계 : 다음과 같이 유형을 작성하십시오. SQL Developer 또는 SQL Plus를 사용하여 데이터베이스 레벨에서 수행해야합니다. 패키지 내에 포함되지 않음

TYPE_DTAP_RECORD_STORE AS OBJECT (DATA_STORE_ID VARCHAR2 (300), INDEX_RECORD CLOB)를 생성 또는 교체하십시오.

STEP 2 : 패키지 위 형 형 RECORD_ARRAY의 배열을 정의가

BINARY_INTEGER

BY STEP 3 TYPE_DTAP_RECORD_STORE 인덱스 테이블 : 절차 baseline_record_insert_bulk (record_array에 i_record) 아래로 저장 프로 시저를 생성;

STEP 4 :

자바

, 저장 프로 시저

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(); 


} 
에게 전화를 아래와 같은 방법 DAO 쓰기