BlobToClob не работает должным образом в AL32UTF8 - PullRequest
0 голосов
/ 19 апреля 2019

Я недавно экспортировал базу данных из WE8MSWIN1252 кодировки в AL32UTF8

У меня есть функция для преобразования BLOB в CLOB

    FUNCTION BlobToClob( stream IN BLOB ) RETURN CLOB IS
     {
                         .
                         .
        DBMS_LOB.WriteAppend(cResult,DBMS_LOB.GETLENGTH(stream)-nPosition+1,UTL_RAW.cast_to_varchar2(DBMS_LOB.SUBSTR(stream,DBMS_LOB.GETLENGTH(stream)-nPosition+1,nPosition)));
                         .
                         .
      }

Я получаю следующее сообщение об ошибке при запуске этой функции в базе данных AL32UTF8.

ORA-06512 длина входного буфера меньше запрашиваемого количества

У вас есть идеи?

Спасибо

Bilel

1 Ответ

1 голос
/ 19 апреля 2019

Используйте стандартную функцию DBMS_LOB.CONVERTTOCLOB.Вам нужно будет указать кодировку источника, например:

DECLARE
   l_dest_lob     CLOB;
   l_src_blob     BLOB;
   l_dest_offset  INTEGER := 1;
   l_src_offset   INTEGER := 1;
   l_lang_context INTEGER;
   l_warning      INTEGER;
BEGIN
   dbms_lob.converttoclob(dest_lob     => l_dest_lob,
                          src_blob     => l_src_blob,
                          amount       => dbms_lob.blobmaxsize,
                          dest_offset  => l_dest_offset,
                          src_offset   => l_src_offset,
                          blob_csid    => nls_charset_id('WE8MSWIN1252'),
                          lang_context => l_lang_context,
                          warning      => l_warning);
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...