2017-09-22 3 views
-1

J'ai une procédure stockée Oracle qui prend un tableau de clobs qui doivent être appelés à partir de Java en utilisant JDBC. J'ai les données en Set dans mon code java. J'ai essayé plusieurs approches différentes et rien ne semble fonctionner. N'importe qui a l'exemple de code pour le faire, s'il vous plaît poster.Comment passer un tableau de chaînes Java en tant que CLOBS à une procédure stockée Oracle qui prend un tableau de CLOBS

Le développeur de la procédure stockée a défini un type de données personnalisé appelé "CLOB_ARRAY" qui est une TABLE de CLOBS. Lorsqu'il s'agit d'un tableau de VARCHAR, cela fonctionne correctement.

Répondre

0

J'ai trouvé un travail autour de Oracle Type et Struct. Voici un résumé de la solution. ÉTAPE 1: Créez un type comme ci-dessous - ceci doit être fait au niveau de la base de données en utilisant SQL Developer ou SQL Plus. Pas dans le package

créer ou remplacer TYPE TYPE_DTAP_RECORD_STORE AS OBJECT (DATA_STORE_ID VARCHAR2 (300), INDEX_RECORD CLOB);

ÉTAPE 2: Dans l'ensemble définissent un tableau du type ci-dessus RECORD_ARRAY TYPE EST TABLEAU DES INDEX TYPE_DTAP_RECORD_STORE PAR BINARY_INTEGER

ÉTAPE 3: Créer la procédure stockée comme ci-dessous procédure baseline_record_insert_bulk (i_record dans record_array);

ÉTAPE 4:

En Java, écrire une méthode DAO comme ci-dessous pour appeler la procédure stockée

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


}