powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / распарсить большой XLM
15 сообщений из 15, страница 1 из 1
распарсить большой XLM
    #39925724
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как распарсить большой xml
Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
with t as
    (
select '<ROWSET_WRAPPER xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ROWSET xmlns:eln="http://a.com" xmlns="http://a.com" eln:version="1.1" >

<ROW>
  <C_REG>1</C_REG>
  <NAME_REG>АР КРИМ</NAME_REG>
<SET_STI>
   <ROW_STI>
     <C_STI>101</C_STI>
     <C_RAJ>1</C_RAJ>
     <T_STI>1</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ (ВЕЗ КРИМ)</NAME_STI>
     <NAME_RAJ>АВТОНОМНА РЕСПУБЛІКА КРИМ</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>102</C_STI>
     <C_RAJ>2</C_RAJ>
     <T_STI>2</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ,М.АЛУШТА)</NAME_STI>
     <NAME_RAJ>М.АЛУШТА</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>103</C_STI>
     <C_RAJ>3</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ,М.АРМЯНСЬК)</NAME_STI>
     <NAME_RAJ>М.АРМЯНСЬК</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>104</C_STI>
     <C_RAJ>4</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ,М. ДЖАНКОЙ)</NAME_STI>
     <NAME_RAJ>М.ДЖАНКОЙ/ДЖАНКОЙСЬКИЙ Р-Н</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>105</C_STI>
     <C_RAJ>5</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ,М.ЄВПАТОРІЯ)</NAME_STI>
     <NAME_RAJ>М.ЄВПАТОРІЯ</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>106</C_STI>
     <C_RAJ>6</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ,М.КЕРЧ)</NAME_STI>
     <NAME_RAJ>М.КЕРЧ</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>107</C_STI>
     <C_RAJ>7</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ, М.КРАСНОПЕРЕКОПСЬК)</NAME_STI>
     <NAME_RAJ>М.КРАСНОПЕРЕКОПСЬК</NAME_RAJ>
   </ROW_STI>
   
</SET_STI>
</ROW>
  
</ROWSET>
</ROWSET_WRAPPER>
' as myxml from dual
   )
   SELECT x.*
     FROM t,
        XMLTABLE(xmlnamespaces('http://a.com' as "eln"),
                '/ROWSET_WRAPPER/eln:ROWSET/eln:ROW/eln:SET_STI/eln:ROW_STI ' PASSING
                XMLTYPE(t.myxml) COLUMNS 
          
                   "C_STI" NUMBER(17, 2) PATH 'eln:C_STI',
                    "C_RAJ"  NUMBER(17, 2) PATH 'eln:C_RAJ',
                    "NAME_STI"  VARCHAR2(2555) PATH 'eln:NAME_STI',
                     "NAME_RAJ"  VARCHAR2(2555) PATH 'eln:NAME_RAJ'
                  
                
                )  x;



При большом размере получаю соответственно ORA-01704: string literal too long

Через clob?
Спасибо!
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925727
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moss
Через clob?
Clob-литералы не длиннее, поскольку их просто нет.
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925750
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или для такого варианта
Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
WITH t AS
 (SELECT XMLType('
<ROWSET>   
<ROW>
  <C_REG>1</C_REG>
  <NAME_REG>АР КРИМ</NAME_REG>
<SET_STI>
   <ROW_STI>
     <C_STI>101</C_STI>
     <C_RAJ>1</C_RAJ>
     <T_STI>1</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ (ВЕЗ КРИМ)</NAME_STI>
     <NAME_RAJ>АВТОНОМНА РЕСПУБЛІКА КРИМ</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>102</C_STI>
     <C_RAJ>2</C_RAJ>
     <T_STI>2</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ,М.АЛУШТА)</NAME_STI>
     <NAME_RAJ>М.АЛУШТА</NAME_RAJ>
   </ROW_STI>
   </SET_STI>
</ROW>


<ROW>
  <C_REG>2</C_REG>
  <NAME_REG>АР КРИМ</NAME_REG>
<SET_STI>
   <ROW_STI>
     <C_STI>101</C_STI>
     <C_RAJ>1</C_RAJ>
     <T_STI>1</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ (ВЕЗ КРИМ)</NAME_STI>
     <NAME_RAJ>АВТОНОМНА РЕСПУБЛІКА КРИМ</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>102</C_STI>
     <C_RAJ>2</C_RAJ>
     <T_STI>2</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ХЕРСОНСЬКІЙ ОБЛАСТІ, АВТОНОМНІЙ РЕСПУБЛІЦІ КРИМ ТА М.СЕВАСТОПОЛІ, ГЕНІЧЕСЬКЕ УПРАВЛІННЯ, ГЕНІЧЕСЬКА ДПІ (ВЕЗ КРИМ,М.АЛУШТА)</NAME_STI>
     <NAME_RAJ>М.АЛУШТА</NAME_RAJ>
   </ROW_STI>
   </SET_STI>
</ROW>

<ROW>
  <C_REG>2</C_REG>
  <NAME_REG>ВIННИЦЬКА</NAME_REG>
<SET_STI>
   <ROW_STI>
     <C_STI>201</C_STI>
     <C_RAJ>1</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ВІННИЦЬКІЙ ОБЛАСТІ, ЖМЕРИНСЬКЕ УПРАВЛІННЯ, БАРСЬКА ДПІ (БАРСЬКИЙ РАЙОН)</NAME_STI>
     <NAME_RAJ>БАРСЬКИЙ Р-Н</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>202</C_STI>
     <C_RAJ>2</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ВІННИЦЬКІЙ ОБЛАСТІ, ТРОСТЯНЕЦЬКЕ УПРАВЛІННЯ, БЕРШАДСЬКА ДПІ (БЕРШАДСЬКИЙ РАЙОН)</NAME_STI>
     <NAME_RAJ>БЕРШАДСЬКИЙ Р-Н</NAME_RAJ>
   </ROW_STI>
   <ROW_STI>
     <C_STI>203</C_STI>
     <C_RAJ>3</C_RAJ>
     <T_STI>6</T_STI>
     <NAME_STI>ГОЛОВНЕ УПРАВЛІННЯ ДПС У ВІННИЦЬКІЙ ОБЛАСТІ, ВІННИЦЬКЕ УПРАВЛІННЯ, ВІННИЦЬКА ДПІ (ВІННИЦЬКИЙ РАЙОН)</NAME_STI>
     <NAME_RAJ>ВІННИЦЬКИЙ Р-Н</NAME_RAJ>
   </ROW_STI>
   
</SET_STI>
</ROW>
</ROWSET> 
') xml
    FROM dual)
    
SELECT
    a.*
  FROM (       SELECT 
               extractValue(VALUE(row1), 'ROW/C_REG') C_REG,
               extractValue(VALUE(row1), 'ROW/NAME_REG') NAME_REG,
               extractValue(VALUE(subrowl), 'ROW_STI/C_STI') C_STI,
               extractValue(VALUE(subrowl), 'ROW_STI/C_RAJ') C_RAJ,
               extractValue(VALUE(subrowl), 'ROW_STI/T_STI') T_STI,
               extractValue(VALUE(subrowl), 'ROW_STI/NAME_STI') NAME_STI,
               extractValue(VALUE(subrowl), 'ROW_STI/NAME_RAJ') NAME_RAJ
          FROM t s,
               TABLE(XMLSequence(s.xml.extract('ROWSET/ROW'))) row1 ,
               TABLE(XMLSequence(VALUE(row1).extract('ROW/SET_STI/ROW_STI')))(+) subrowl) a
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925756
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Moss
Через clob?
Clob-литералы не длиннее, поскольку их просто нет.
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM

Сори если не правильно спросил.

Попробую по-другому.

Есть большой текст в виде набора тэгов.
Необходимо распарсить его для последующей вставки в таблицу.
В какой тип данных можно его сохранить, и как из него потом извлечь данные?
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925767
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может в сторону external table копать?
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925770
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moss,

а зачем это делать в БД ?
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925773
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moss
Есть большой текст
Где он есть?
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925774
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Moss
Есть большой текст
Где он есть?
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM

В файле .xml
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925775
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй,

В Excel я делал импорт а потом в базу вставлял.
Сразу в базу вставлял т.к. показал в примерах, но не натыкался на ограничение.
Можно конечно "забить" но уже хочу разобраться..
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925816
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MossВ файле .xml

а чем dbms_lob не устроил?
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925953
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
merch,
я создал табличку myblob_xml с полем blob
закинул в нее текст.
Попытался порезать на куски, но не учатно.
Думал обрезать от <ROW> по </ROW> но и внутри этих тегов много текста...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT 

UPPER( UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(a, 2000, (NG.ID - 1) * 1000 + 1))) TextBlock

FROM myblob_xml x, (SELECT level as ID FROM dual connect BY level <100000)  NG

WHERE (NG.ID - 1) * 1000 < DBMS_LOB.Getlength(a)



Подкиньте идей....
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39925962
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moss
с полем blob
Зачем?
Moss
Попытался порезать на куски
Зачем?
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39926412
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,
Я же писал - Думал обрезать от <ROW> по </ROW>
Почему blob ? потому что когда-то у меня была задачка найти есть ли определенный текст в поле сlob.

Я делал так
Код: 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.
SELECT DISTINCT *

FROM (SELECT aa.sql_id , trunc(bb.sample_time),

UPPER( UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(ext_clob2blob_moss(sql_text), 2000, (NG.Id - 1) * 1000 + 1))) TextBlock

FROM dba_hist_sqltext aa
,
(
select distinct sql_id , sample_time from  dba_hist_active_sess_history
where sample_time >= to_date('20131208','YYYYMMDD')
  and sample_time <= to_date('20131213','YYYYMMDD')
  and machine like '%WS-KV-000-91259%'

) bb , (SELECT level as ID FROM dual connect BY level <100000) NG 
where 
aa.sql_id = bb.sql_id  
and (NG.Id- 1) * 1000 < DBMS_LOB.Getlength(ext_clob2blob_moss(sql_text))

AND UPPER(

UTL_RAW.CAST_TO_VARCHAR2(
 
DBMS_LOB.SUBSTR(

ext_clob2blob_moss(sql_text), 

2000,

(NG.Id - 1) * 1000 + 1

))) LIKE UPPER('%380000%') 

)



Еще и конвертировал clob в blob
Код: 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.
create or replace function ext_clob2blob_moss(p_clob in clob) return blob is
 -- transforming CLOB a BLOB
 l_off number default 1;
 l_amt number default 4096;
 l_offWrite number default 1;
 l_amtWrite number;
 l_str varchar2(4096 char);
 p_blob blob;
 begin
  dbms_lob.createtemporary(p_blob,true,dbms_lob.session);
  begin
   loop
    dbms_lob.read ( p_clob, l_amt, l_off, l_str );
    l_amtWrite := utl_raw.length ( utl_raw.cast_to_raw( l_str) );
    dbms_lob.write( p_blob, l_amtWrite, l_offWrite,
    utl_raw.cast_to_raw( l_str ) );
    l_offWrite := l_offWrite + l_amtWrite;
    l_off := l_off + l_amt;
    l_amt := 4096;
   end loop;
  exception when no_data_found then null;
  end;
  return p_blob;
 end;



Почему я когда-то делал именно так - даже не помню...

Вот и решил попробовать похожим способом... но неудачно..

Я понимаю, что задавая вопросы Вы возможно хотите что-бы я обосновывая ход своих мыслей понимал почему я копаю не в ту сторону.. Но пока не докопался...
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39926539
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moss
когда-то у меня была задачка
Moss
Но пока не докопался...
Не каждому дано…
...
Рейтинг: 0 / 0
распарсить большой XLM
    #39928605
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Спасибо за помощь.
от кого, но от Вас не ожидал....
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / распарсить большой XLM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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