Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210 / 14 сообщений из 14, страница 1 из 1
01.12.2017, 15:44
    #39562632
неспал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
Добрый день.

Есть эксель-файл. Внутри него указана кодировка
Код: xml
1.
<?xml version="1.0" encoding="utf-8"?>



При чтении файла и выполнении
Код: plsql
1.
xmltype(<файл> , nls_charset_id('UTF8') )


я получаю ошибку
Код: plsql
1.
2.
3.
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00210: expected '<' instead of 'P'


Аналогичная ситуация с кодировкой

Код: plsql
1.
 NLS_CHARSET_ID('CL8KOI8R') и NLS_CHARSET_ID( 'CL8MSWIN1251' ) 



Файл приложила.

Подскажите, пожалуйста, как узнать, какую кодировку ставить?
...
Рейтинг: 0 / 0
01.12.2017, 16:12
    #39562659
ВОМ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
неспалприложилаdump(substr())
...
Рейтинг: 0 / 0
01.12.2017, 16:43
    #39562684
неспал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
ВОМ,

спасибо, DUMP вернет кодировку.
Я читаю файл в BLOB, в этом случае не вижу как применить DUMP, ведь чтобы передать информацию в DUMP я должна указать кодировку, для конвертации в CLOB. И дамп покажет ее. К чему применить DUMP?

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
declare   
   x   NUMBER;
  p_blob BLOB := empty_blob();
  p_clob CLOB := empty_blob();  
  src_loc BFILE;
  p_pathname varchar2(150):='tt.xlsx';
  tt XMLType;
begin
  src_loc := BFILENAME('INDIR', p_pathname);
   -- Open source binary file from OS
  DBMS_LOB.OPEN(src_loc, DBMS_LOB.LOB_READONLY);
  -- Create temporary LOB object
  DBMS_LOB.CREATETEMPORARY(
        lob_loc => p_blob
      , cache   => true
      , dur     => dbms_lob.session
  );
  -- Open temporary lob
  DBMS_LOB.OPEN(p_blob, DBMS_LOB.LOB_READWRITE);
  -- Load binary file into temporary LOB
  DBMS_LOB.LOADFROMFILE(
        dest_lob => p_blob
      , src_lob  => src_loc
      , amount   => DBMS_LOB.getLength(src_loc));

  --file=UTF-8, select t.value/*='CL8MSWIN1251'*/ from nls_database_parameters t where t.PARAMETER = 'NLS_CHARACTERSET'
  tt:= XMLTYPE( p_blob, nls_charset_id( 'CL8MSWIN1251' ) );  
  dbms_lob.CreateTemporary(p_clob, TRUE, dbms_lob.CALL);

  dbms_lob.convertToClob(
    dest_lob      => p_clob,
    src_blob      => p_blob,
    amount        => dbms_lob.lobmaxsize,
    dest_offset   => p_dest_offset,
    src_offset    => p_src_offset,
    blob_csid     => nls_charset_id('CL8MSWIN1251'),
    lang_context  => p_lang_context,
    warning       => p_warning
    );
    
    select dump( dbms_lob.substr( p_clob, 4000, 1 ),10) into x from dual;
    dbms_output.put_line(x);
end;       
...
Рейтинг: 0 / 0
01.12.2017, 16:45
    #39562687
неспал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
в декларации ошиблась:
Код: plsql
1.
p_clob CLOB;
...
Рейтинг: 0 / 0
01.12.2017, 16:49
    #39562694
dbms_lob.read
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
неспалК чему применить DUMP?К raw. Но он сам по себе уже dump.
...
Рейтинг: 0 / 0
01.12.2017, 16:53
    #39562699
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
Тут еще такая фишка распространенная на форуме -- следует обращать внимание на ник "серого" комментатора
...
Рейтинг: 0 / 0
01.12.2017, 18:31
    #39562802
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
Вячеслав ЛюбомудровТут еще такая фишка распространенная на форуме -- следует обращать внимание на ник "серого" комментатора
+1, особенно если это аббревиатура типа "BOM"
...
Рейтинг: 0 / 0
01.12.2017, 18:43
    #39562808
неспал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
Спасибо.
CharacterSet=CL8MSWIN1251
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
DECLARE
     fil BFILE; 
     pos INTEGER;
     amt BINARY_INTEGER; 
     buf RAW(4000); 
     res VARCHAR2(250);
BEGIN 
  fil := BFILENAME('INDIR', 'tt.xlsx');
     
     dbms_lob.open(fil, dbms_lob.lob_readonly);   
      amt := 40; pos := 1; buf := ''; 
     dbms_lob.read(fil, amt, pos, buf); 
     
     select DUMP(substr(buf,1,40),1016) into res from dual;
     
     dbms_output.put_line(res);

     dbms_lob.close(fil); 
     
END; 



xmltype c этой кодировкой дает ошибку.
Код: plsql
1.
tt:= XMLTYPE( p_blob, nls_charset_id( 'CL8MSWIN1251' ) );



Код: plsql
1.
2.
3.
4.
5.
6.
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00210: expected '<' instead of 'P'
Error at line 1
ORA-06512: at "SYS.XMLTYPE", line 283
ORA-06512: at line 25



Как посмотреть код ? Сконвертировала в CLOB, с nls_charset_id( 'CL8MSWIN1251' ),
Вывела CLOB, кодировка нечитабельная
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  dbms_lob.convertToClob(
    dest_lob      => p_clob,
    src_blob      => p_blob,
    amount        => dbms_lob.lobmaxsize,
    dest_offset   => p_dest_offset,
    src_offset    => p_src_offset,
    blob_csid     => nls_charset_id('CL8MSWIN1251'),
    lang_context  => p_lang_context,
    warning       => p_warning
    );
        
    dbms_output.put_line( dbms_lob.substr( p_clob, 4000, 1 ));
end;    



на клиенте чарсет AMERICAN_AMERICA.CL8MSWIN1251
Код: plsql
1.
select sys_context('userenv', 'LANGUAGE') from dual
...
Рейтинг: 0 / 0
01.12.2017, 18:51
    #39562811
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
Конвертить следует в кодировку БД.
...
Рейтинг: 0 / 0
01.12.2017, 19:07
    #39562818
неспал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
andrey_anonymous,

Спасибо.
там тоже CL8MSWIN1251
Код: plsql
1.
2.
select * from database_properties
where PROPERTY_NAME in ('NLS_CHARACTERSET')
...
Рейтинг: 0 / 0
01.12.2017, 19:13
    #39562821
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
Чет я не догнал.
Как
неспалЕсть эксель-файл. Внутри него указана кодировка
Код: xml
1.
<?xml version="1.0" encoding="utf-8"?>



сочетается с
неспал
Код: plsql
1.
2.
3.
4.
5.
[src PLSQL]
  dbms_lob.convertToClob(
...
    blob_csid     => nls_charset_id('CL8MSWIN1251'),
...




Какая на самом деле кодировка в файле?
...
Рейтинг: 0 / 0
01.12.2017, 19:28
    #39562832
неспал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
andrey_anonymous,
Запуск этого скрипта возвращает
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
DECLARE
     fil BFILE; 
     pos INTEGER;
     amt BINARY_INTEGER; 
     buf RAW(4000); 
     res VARCHAR2(250);
BEGIN 
  fil := BFILENAME('INDIR', 'tt.xlsx');
     
     dbms_lob.open(fil, dbms_lob.lob_readonly);   
      amt := 40; pos := 1; buf := ''; 
     dbms_lob.read(fil, amt, pos, buf); 
     
     select DUMP(substr(buf,1,40),1016) into res from dual;
     
     dbms_output.put_line(res);

     dbms_lob.close(fil); 
     
END;


возвращает
Код: plsql
1.
Typ=1 Len=40 CharacterSet=CL8MSWIN1251: 35,30,34,42,30,33,30,34,31,34,30,30,30,36,30,30,30,38,30,30,30,30,30,30,32,31,30,30,36,32,45,45,39,44,36,38,35,45,30,31


если взять с сервера файл tt.xlsx, разархивировать его и открыть [Content_Types].xml,
в первой строке получу
Код: plsql
1.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
...
Рейтинг: 0 / 0
02.12.2017, 00:51
    #39562918
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
неспалесли взять с сервера файл tt.xlsx, разархивировать его и открыть [Content_Types].xml,


Тудыть его в качель...
...
Рейтинг: 0 / 0
02.12.2017, 01:50
    #39562927
xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210
andrey_anonymousТудыть его в качель...Ну значит серый ВОМ не угадал.
неспал35,30,34,42,30,33,30,34,31,34,30,30,30,36,30,30,30,38,30,30,30,30,30,30,32,31,30,30,36,32,45,45,39,44,36,38,35,45,30,31
Ну ты не охренело ли хекс в хекс перегонять.
50 4B 03 04 00 ... - Это у тебя заголовок архива.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / xmltype(xlsx,nls_charset_id('UTF8')) ошибка LPX-00210 / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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