Mybatis строковое значение вставить в оракула CLOB - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь вставить список записей в базу данных oracle, используя mybatis orm. Ниже выдается исключение при вставке в базу данных.

Ошибка обновления базы данных. Причина: java.sql.SQLException: ORA-01461: может связывать значение LONG только для вставки в столбец LONG

Запрос, который я написал для вставки данных.

<insert id="insertCusHistoryData" parameterType="com.dpworld.tos.admin.model.CusHistory">   
      INSERT INTO 
         CUS_ACTION_HISTORY_T(SEQ_NO, GLOBAL_ID, REQUEST_ID, CUS_ACTION_CODE, CUS_REQUEST_TIME, ENTITY_TYPE, ENTITY_KEY, PARENT_ENTITY_KEY,
             DELTA_CHANGE, TOTAL_PROCESSING_TIME, TOTAL_SERVER_PROCESSING_TIME, USER_AN, UPDATE_MODE, TOTAL_TIME)
            select  A.*  from(
     <foreach collection="cusHistory" item="history" separator="UNION ALL" >  
        SELECT 
                #{history.sequenceNo} as SEQ_NO,
                #{history.globalId} as GLOBAL_ID,
                #{history.requestId} as REQUEST_ID,
                #{history.cusActionCode} as CUS_ACTION_CODE,
                #{history.cusRequestTime} as CUS_REQUEST_TIME,
                #{history.entityType} as ENTITY_TYPE,
                #{history.entityKey} as ENTITY_KEY,
                #{history.parentEntityKey} as PARENT_ENTITY_KEY,
                #{history.deltaChange, jdbcType=CLOB},
                #{history.totalProcessingTime} as TOTAL_PROCESSING_TIME,
                #{history.totalServerProcessingTime} as TOTAL_SERVER_PROCESSING_TIME,
                #{history.userAn} as USER_AN,
                #{history.updateMode} as UPDATE_MODE,
                #{history.totalTime} as TOTAL_TIME
            FROM DUAL 
    </foreach>)A 

Но когда я изменяю код вставки, как показано ниже, он вставляет свойство, но это занимает около 23 секунд до завершения задания.

BEGIN
     <foreach collection="cusHistory" item="history" separator="" > 
         INSERT INTO 
         CUS_ACTION_HISTORY_T(SEQ_NO, GLOBAL_ID, REQUEST_ID, CUS_ACTION_CODE, CUS_REQUEST_TIME, ENTITY_TYPE, ENTITY_KEY, PARENT_ENTITY_KEY,
            DELTA_CHANGE, TOTAL_PROCESSING_TIME, TOTAL_SERVER_PROCESSING_TIME, USER_AN, UPDATE_MODE, TOTAL_TIME)
         VALUES(
                #{history.sequenceNo},
                #{history.globalId},
                #{history.requestId},
                #{history.cusActionCode},
                #{history.cusRequestTime},
                #{history.entityType},
                #{history.entityKey},
                #{history.parentEntityKey},
                #{history.deltaChange, jdbcType=CLOB},
                #{history.totalProcessingTime},
                #{history.totalServerProcessingTime},
                #{history.userAn},
                #{history.updateMode},
                #{history.totalTime});
    </foreach>
      END;

Я попытался удалить столбец CLOB из первого и второго запроса, первый запрос занял около 8 секунд, а второй запрос занял около 20 секунд, в этом случае возникает огромная проблема с производительностью.

Пожалуйста, совет.

...