powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
10 сообщений из 35, страница 2 из 2
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726063
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousЕсли хочется хранить именно оригинал xml-документа, то рассмотрите BLOB.
+100500
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726067
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-menja_zovut_deniskaкак я могу "сделать короткий wellformed- образец xml-файла, демонстрирующий проблему"Возьми исходный xml и отсеки все лишнее.

menja_zovut_deniskaВыстрел не попал: ora-06502 numeric or value error invalid LOB locatorinsert empty_clob().

Это что значит?

-2-menja_zovut_deniskaкак я могу "сделать короткий wellformed- образец xml-файла, демонстрирующий проблему"Возьми исходный xml и отсеки все лишнее.

menja_zovut_deniskaВыстрел не попал: ora-06502 numeric or value error invalid LOB locatorinsert empty_clob().

далее ora-22289 не может использовать LOADFROMFILE при не открытом LOB

Коды Bfile_Csid 873(al32utf8) и 871 (utf8) показывают один и тот же результат
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726070
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsevandrey_anonymousЕсли хочется хранить именно оригинал xml-документа, то рассмотрите BLOB.
+100500
Оригинал не нужен. Задача - распарсить документ а cl8mswin1251
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726071
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жалко править документ нельзя. В сообщении 21720682 не почистил цитаты.
"Это что значит?" относилось к "Возьми исходный xml и отсеки все лишнее"
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726086
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и парсите исходный документ, а не занимайтесь мазохизмом с кодировками

Насколько я помню (если не ошибаюсь) в XMLType можно сразу и BLOB преобразовать. Запихивать в CLOB не обяательно.

https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_xml.htm#i1009657
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726098
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevТак и парсите исходный документ, а не занимайтесь мазохизмом с кодировками

Насколько я помню (если не ошибаюсь) в XMLType можно сразу и BLOB преобразовать. Запихивать в CLOB не обяательно.

https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_xml.htm#i1009657

Какую конкретно ф-цию вы имеете в виду и каким способом?

createXML?

откуда блоб брать? уже загруженный из таблицы?
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726115
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
menja_zovut_deniskaоткуда блоб брать? уже загруженный из таблицы?А как же ты это делал раньше?menja_zovut_deniska-2-...делай сразу селект из файла.Делал. Ситуация не менялась.
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726124
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВыстрел вслепую:

накосячил аж в двух местах :)
- не поправил insert
- забыл, что bfilename позволяет автомагически открыть файл только в dml.
Код: plsql
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.
declare 
x bfile;
    Dest_Clob  CLOB;
    Dst_Offset NUMBER:=1;
    Src_Offset NUMBER:=1;
    Lang_Ctx   NUMBER := Dbms_Lob.Default_Lang_Ctx;
    p_Warning  NUMBER;  
BEGIN
x :=Bfilename('C_TEMP','TEST.xml');
dbms_lob.open(x, dbms_lob.lob_readonly);
        delete clob_test;
        commit;
      insert into clob_test(id,i)
                  values(Empty_Clob(),1)
           returning id into Dest_Clob
            ;
        Dbms_Lob.Loadclobfromfile(Dest_Lob     => Dest_Clob,
                                      Src_Bfile    => x,
                                      Amount       => DBMS_LOB.LOBMAXSIZE,
                                      Dest_Offset  => Dst_Offset,
                                      Src_Offset   => Src_Offset,
/* Попробуйте выбрать одну из строк ниже */
--                                      Bfile_Csid   =>  nls_charset_id('AL32UTF8'),
                                      Bfile_Csid   =>  nls_charset_id('UTF8'),
                                      Lang_Context => Lang_Ctx,
                                      Warning      => p_Warning);
dbms_lob.close(x);
  if p_Warning = DBMS_LOB.WARN_INCONVERTIBLE_CHAR then
    dbms_output.put_line('DBMS_LOB.WARN_INCONVERTIBLE_CHAR');
  end if;
  commit;
end;
/




menja_zovut_deniskaКакую конкретно ф-цию вы имеете в виду и каким способом?
createXML?

Можно и ее:

Код: plsql
1.
select xmltype.createXml(Bfilename('C_TEMP','TEST.xml'), nls_charset_id('UTF8'),null,0,0) from dual;


Можно и просто конструктором попробовать:
Код: plsql
1.
select xmltype(Bfilename('C_TEMP','TEST.xml')) from dual;



Как получить тестовый xml:
вообще непонятно в чем затруднения.
Берете свой файл, дающий ошибко.
Вырезаете все подряд пока ошибко не исчезнет - удобно половинным делением.
Возвращаете обратно последний вырезанный кусок, убеждаетесь что проблема вернулась, режете внутри него.
Через несколько итераций получите достаточно короткий документ, который можно зазиповать и прибить на форум.
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726170
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиграться-разобраться можно попробовать на этом примере:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with t0(s) as (select '<?xml version="1.0" encoding="UTF-8"?><a>Съешь-ка еще этих мягких французских булочек, да выпей-ка чаю!</a>' from dual
     union all select '<?xml version="1.0" encoding="WINDOWS-1251"?><a>Съешь-ка еще этих мягких французских булочек, да выпей-ка чаю!</a>' from dual
     union all select '<a>Съешь-ка еще этих мягких французских булочек, да выпей-ка чаю!</a>' from dual
-- Генерируем LPX-00217
--     union all select '<a>'||chr(22)||chr(17)||'</a>' from dual
     )
, t_1251(s) as ( -- Получаем документ в кодировке win1251 (если базулька не utf-8)
                 select convert(s,'CL8MSWIN1251') from t0
                 )
, t_utf8(s) as ( -- Получаем документ в кодировке utf-8
                 select convert(s,'AL32UTF8') from t0
                 )
select s source_string
     -- кастуем utf-8 в raw - изображаем BLOB
     , xmltype.createxml(utl_raw.cast_to_raw(s),0,null,0,0).getStringVal() result_auto -- csid=0 - пытается разобораться самостоятельно (учитывает кодировку, заявленную в заголовке xml, по умолчанию полагает utf-8)
     , xmltype.createxml(utl_raw.cast_to_raw(s),nls_charset_id('AL32UTF8'),null,0,0).getStringVal() force_utf8 -- кодировка документа явно указана как utf8, заголовок xml по боку
     , xmltype.createxml(utl_raw.cast_to_raw(s),nls_charset_id('CL8MSWIN1251'),null,0,0).getStringVal() force_1251 -- кодировка документа явно указана как win1251, заголовок xml по боку
  from t_utf8
--  from t_1251 -- в этом варианте будет работать только force_1251 и result_auto для строки с заголовком "windows-1251", остальные по очевидной причине (нельзя разобрать реальный 1251 как utf-8) выбросят LPX-00217
;
...
Рейтинг: 0 / 0
Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
    #39726214
menja_zovut_deniska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за советы и ответы.
Каюсь, был немного не прав в части select-а сразу из файла
Начинал работать с инстансом на 10.2.0.4
И в нем при попытке select-а из файла аля

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with a as (select XMLTYPE(bfilename('C_TEMP','TEST.xml'),NLS_CHARSET_ID('AL32UTF8')) xm from dual)
select d.*
 from 
   a,
   Xmltable('//Файл/Документ' Passing a.xm 
                Columns 
                IDDoc VARCHAR2(1000) Path '@ИдДок'
               )d



Вылезала ошибка

LX-00200 could not convert from encoding UTF-8 to WINDOWS-1251

Сейчас проверил на 11.2.0.4 - селект из файла работает. Проверил на другом инстансе 11.2.0.3 - работает

А вот на 10.2.0.4 на двух разных инстансах запрос к файлу выдает ошибку.
NLS_CHARSET_ID('UTF8') тоже выдает ошибку.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с распарсиванием XML файл-а в БД с NLS_CHARACTERSET=CL8MSWIN1251
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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