Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / загрузка файла в clob на 10g / 5 сообщений из 5, страница 1 из 1
27.09.2018, 18:07
    #39709454
Wisky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка файла в clob на 10g
Пытаюсь из директория загрузить файлы содержащие xml clob.

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

В начале попробовала через xmltype.

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT
xmltype(
            bfilename('DIR_REESTR', '1.xml'),
            nls_charset_id('UTF8')
        )
FROM DUAL d



Тут я попадаю на исключение
ORA-19202: Error occurred in XML processing
LPX-00200: could not convert from encoding UTF-8 to WINDOWS-1251

Из-за старой версии и кривой кодовой страницы сервера Oracle от этого отказалась.

Стала использовать LOADCLOBFROMFILE.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
CREATE TABLE T_XML (NOTE CLOB)
/
DECLARE
    dest_clob   CLOB;
    src_clob    BFILE := bfilename('DIR_REESTR', '1.xml');
    dst_offset  number := 1 ;
    src_offset  number := 1 ;
    lang_ctx    number := DBMS_LOB.DEFAULT_LANG_CTX;
    p_warning     number;
begin


   DBMS_LOB.OPEN(src_clob, DBMS_LOB.LOB_READONLY);

 dbms_output.put_line(DBMS_LOB.GETLENGTH(src_clob));
  dbms_lob.createtemporary (dest_clob, FALSE);
    DBMS_LOB.LOADCLOBFROMFILE(
          DEST_LOB     => dest_clob
        , SRC_BFILE    => src_clob
        , AMOUNT       => DBMS_LOB.GETLENGTH(src_clob)
        , DEST_OFFSET  => dst_offset
        , SRC_OFFSET   => src_offset
        , BFILE_CSID   => DBMS_LOB.DEFAULT_CSID
        , LANG_CONTEXT => lang_ctx
        , WARNING      => p_warning
    );
   DBMS_LOB.CLOSE(src_clob);
  DELETE FROM T_XML;
  INSERT INTO T_XML   (note)      
    values(dest_clob);  

end;
/
SELECT * FROM T_XML;



Загрузка проходит, но что толку в неверной кодировке.
Код: xml
1.
<?xml version="1.0" encoding="UTF-8"?><Файл ИдФайл="VO_RRMSPSV_0000_9965_20180910_00a304d6-c977-46dd-a3d8-28efc778653e" ВерсФорм="4.01" ТипИнф="РЕЕСТРМСП" КолДок="900"><ИдОтпр><ФИООтв Фамилия="-" Имя="-"/></ИдОтпр><Документ ИдДок="e258eb6e-939d-3882-fbf8-b9a1a4208b6a" ДатаСост="10.09.2018" ДатаВклМСП="10.09.2016" Р’РёРґРЎСѓР±РњРЎРџ="1" КатСубМСП=...



Есть еще какой то путь?
Уменьшенная копия файла прилагается.
...
Рейтинг: 0 / 0
27.09.2018, 18:20
    #39709464
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка файла в clob на 10g
Wisky
Код: sql
1.
        , BFILE_CSID   => DBMS_LOB.DEFAULT_CSID



https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/d_lob.htm#i998978
авторbfile_csid

Character set id of the source (BFILE) file.
...
Рейтинг: 0 / 0
27.09.2018, 18:40
    #39709478
Wisky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка файла в clob на 10g
спасибо, с 873 прокатил0
...
Рейтинг: 0 / 0
28.09.2018, 11:01
    #39709705
Wisky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка файла в clob на 10g
Когда попыталась загрузить полный хml попалась на
ORA-22993: specified input amount is greater than actual source amount

DBMS_LOB.GETLENGTH(src_clob) = 9077147
...
Рейтинг: 0 / 0
28.09.2018, 14:00
    #39709842
Wisky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка файла в clob на 10g
Как я понимаю, многоитерационная загрузка через буфер реализована в процедуре, т.к. длина 3556436 заливается успешно (это явно больше 32767).
А эта ошибка так же появляется при AMOUNT>LEN.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / загрузка файла в clob на 10g / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]