2013-10-28 3 views
0

Я использую Simple.Data.Oracle для вставки данных в таблицу. Я пытаюсь вставить очень большое значение в один из столбцов, и это дает мне следующую ошибку:Ошибка переполнения буфера при использовании Simple.Data.Oracle

ORA-22835: Буфер для лиллов с конвертированием в CLOB с типом CHAR eller BLOB до RAW (faktisk: 19471, максимальный : 4000)

Я длинный путь вперед в проекте и не могу позволить себе сбросить Simple.Data.Oracle и искать другие чередуются на данный момент ...

+0

Спасибо Бен, но я хочу вставить все значение, взятое подстрокой, не будет полезно в моем случае. Это их способ объявить параметр типа CLOB в Simple.Data.Oracle? –

ответ

0

Вы преобразование CLOB в строка описания. В строке в SQL содержится не более 4000 символов, поэтому вам нужно взять подстроку CLOB, если вы хотите поместить ее в символ.

Самый простой способ сделать это - использовать DBMS_LOB.SUBSTR.

Не похоже, что simple.data.oracle поддерживает CLOB изначально; если вы посмотрите на the code for the DBTypeConverter class словарь отображает CLOB в DBType.String:

{"CLOB", DbType.String}, 

Это несмотря на the documentation linked in the comments что указывает, что он должен быть отображен в DBType.Object. Хотя сопоставления очень незначительно изменились в 11.2 documentation, CLOB все еще является объектом.

Я не знаю причины для принятия решения о том, что CLOB является строкой, но как я вижу у вас есть несколько вариантов:

  1. Raise отчет об ошибке на GitHub и быть готовым сказали, что это не Жук.
  2. Вытяните версию и измените ее самостоятельно - будьте предупреждены, что, поскольку предполагается, что CLOB является строкой, может быть сделано много изменений.
  3. Используйте DBMS_LOB.SUBSTR и «кусок» CLOB в столько строк, сколько требуется, используя параметр смещения.
+0

Спасибо, Бен, я закончил тем, что использовал ODP.Net для этого конкретного случая, так как я действительно не мог позволить себе вкладывать больше времени в поиск постоянного решения. –

Смежные вопросы