оракул процедура с clob как в параметре (большой текст) - PullRequest
0 голосов
/ 07 марта 2012

Я столкнулся с проблемой при попытке вставить большой текстовый объект в базу данных Oracle с помощью процедуры.

Моя программа должна вставить тысячи элементов в базу данных оракула, так как из-за проблем с производительностью вставки по одному я написал процедуру оракула и вставил все элементы сразу.

Ibatis:

<parameterMap id="EttAttrCall" class="java.util.Map">
        <parameter property="ettAttrLst" jdbcType="CLOB" javaType="java.lang.String" mode="IN"/>
        <parameter property="pjtId" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
        <parameter property="createUser" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
    </parameterMap>
    <procedure id="insertTmpEttAttr" parameterMap="EttAttrCall">
       { call INS_TMP_ETT_ATTR(?,?,?)}  
    </procedure>

процедура оракула:

create or replace
PROCEDURE INS_TMP_ETT_ATTR
(
  ettAttrLst IN CLOB,  
  pjtId IN VARCHAR2,
  createUser IN VARCHAR2
) 

Все работает нормально, если длина данных не превышает 3 миллиона символов, но если больше этого числа, оракул выдаст это исключение: ORA-06502: PL / SQL: ошибка числового значения или значения: слишком маленький буфер строки символов

Я пытался искать в интернете, но мало полезной информации. Поэтому любые советы или идеи будут высоко оценены.

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Ограничение для CLOB составляет 4 гигабайта, поэтому я предполагаю, что вы имеете дело с ограничением Varchar2, которое превышено в вашем коде PL / SQL.

Вам нужно посмотреть номера строк в стеке ошибок. Обычно Oracle предоставляет дополнительные ошибки ORA-06512, которые указывают эти объекты PL / SQL и номера строк стека ошибок.

Просто дикая догадка, если вы используете многобайтовые символы: позаботьтесь, указали ли вы размер Varchar2 в байтах (по умолчанию) или в символах. Ограничение для varchar2 составляет 32767 байт (не символов!)

Изменить после вашего комментария ниже:

обзор этот вопрос с примерами выполнения пакетной вставки

0 голосов
/ 29 июля 2018

Я получал эту ошибку при попытке записать строку в BLOB-объект, поэтому я преобразовал ее в байт [] следующим образом:

 byte[] bytes = content.getBytes();//conntent is a String contains more than 100 line date
...