Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вытащить часть xml-стоки / 25 сообщений из 26, страница 1 из 2
24.05.2018, 18:41
    #39649553
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
Есть вот такая
строка<block><number>0</number><SysID></SysID><errorcode>-1</errorcode><errortext>ТЕКСТ_ОШИБКИ</errortext></block><block><number>1</number><SysID></SysID><errorcode>1</errorcode><errortext></errortext></block>

Хочу выбрать только "ТЕКСТ_ОШИБКИ". Можно конечно наколбасить substr/instr, но это как-то не красиво. Как можно без substr/instr получить искомое?
...
Рейтинг: 0 / 0
24.05.2018, 18:53
    #39649558
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
RTFM xmltype.extract
...
Рейтинг: 0 / 0
24.05.2018, 19:36
    #39649570
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
deprecated же
...
Рейтинг: 0 / 0
24.05.2018, 19:55
    #39649574
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzz
Код: plsql
1.
2.
<block><number>0</number><SysID></SysID><errorcode>-1</errorcode><errortext>ТЕКСТ_ОШИБКИ</errortext> </block>
<block><number>1</number><SysID></SysID><errorcode>1</errorcode><errortext></errortext></block>

у тебя кривой xml - нет родительского блока. Обрами это все в какой-нибудь тег и воспользуйся xmlquery или xmltable:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select 
  xmlcast(
     xmlquery('/root/block[1]/errortext' passing
        xmltype('<root>'||'&строка'||'</root>')
        returning content
     )
     as varchar2(100)
  )
  from dual;
-- или:
select *
from xmltable(
       '/root/block'
       passing
       xmltype('<root>
                &строка
                </root>'
              )
       columns 
         "number","errorcode","errortext"
       );

...
Рейтинг: 0 / 0
25.05.2018, 00:37
    #39649623
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
andrey_anonymousdeprecated жеextractvalue
...
Рейтинг: 0 / 0
25.05.2018, 02:35
    #39649642
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
-2-andrey_anonymousdeprecated жеextractvalue
и она тоже
...
Рейтинг: 0 / 0
25.05.2018, 07:30
    #39649662
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
andrey_anonymousdeprecated жеТаки RTFM XMLTYPE.extract (FAQ)
...
Рейтинг: 0 / 0
25.05.2018, 10:24
    #39649718
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
xtender, вот что положили в поле - то и есть. Зачем класть часть xml'я - сам не пойму.
...
Рейтинг: 0 / 0
25.05.2018, 17:36
    #39650061
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
Elic , прочитал, но так и не понял, как это применить к моему недоxml'ю.
...
Рейтинг: 0 / 0
25.05.2018, 17:53
    #39650078
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzzкак это применить к моему недоxml'ю.До-xml-ь его, как сказали.
...
Рейтинг: 0 / 0
28.05.2018, 11:16
    #39650922
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
Elic , попробовал
такselect *
from xmltable(
'/root/block'
passing
xmltype('<root>
select tcl.xmlout from scott.trancreationlog tcl where tcl.id = 423635115
</root>'
)
columns
"number","errorcode","errortext"
);
и
эдакselect
xmlcast(
xmlquery('/root/block[1]/errortext' passing
xmltype('<root>'||'select tcl.xmlout from scott.trancreationlog tcl where tcl.id = 423635115'||'</root>')
returning content
)
as varchar2(100)
)
from dual;

Ошибок нет, данных тоже.
Что-то делаю явно не так...
...
Рейтинг: 0 / 0
28.05.2018, 11:34
    #39650941
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzzОшибок нетНе верю.GroMoZeKazzzЧто-то делаю явно не так...Научись пользоваться тэгами, и синтаксическая раскраска покажет, что.
...
Рейтинг: 0 / 0
28.05.2018, 11:35
    #39650943
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select *
from 
 scott.trancreationlog tcl,
 xmltable(
       '/root/block'
       passing
       xmltype('<root>'||tcl.xmlout||'</root>'
              )
       columns 
         "number","errorcode","errortext"
       )
where tcl.id = 423635115;
...
Рейтинг: 0 / 0
28.05.2018, 11:37
    #39650946
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
  xmlcast(
     xmlquery('/root/block[1]/errortext' 
         passing
             xmltype('<root>'||(select tcl.xmlout from scott.trancreationlog tcl where tcl.id = 423635115)||'</root>')
         returning content
     )
     as varchar2(100)
  )
from dual;
...
Рейтинг: 0 / 0
28.05.2018, 16:53
    #39651201
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
xtender , попробовал оба варианта - не взлетело. Пробовал на тестовой таблице .
...
Рейтинг: 0 / 0
28.05.2018, 17:00
    #39651208
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzz,

вот прямо так и вставил?
Код: plsql
1.
insert into test values ('&lt;block&gt;&lt;number&gt;0&lt;/number&gt;&lt;SysID&gt;&lt;/SysID&gt;&lt;errorcode&gt;-1&lt;/errorcode&gt;&lt;errortext&gt;ТЕКСТ_ОШИБКИ&lt;/errortext&gt;&lt;/block&gt;&lt;block&gt;&lt;number&gt;1&lt;/number&gt;&lt;SysID&gt;&lt;/SysID&gt;&lt;errorcode&gt;1&lt;/errorcode&gt;&lt;errortext&gt;&lt;/errortext&gt;&lt;/block&gt;');



Выведи
Код: plsql
1.
2.
3.
4.
5.
set long 9999
set lines 400
set pages 0
select xmltype('<root>'||(select tcl.xmlout from scott.trancreationlog tcl where tcl.id = 423635115)||'</root>') x
from scott.trancreationlog tcl where tcl.id = 423635115;
...
Рейтинг: 0 / 0
28.05.2018, 17:02
    #39651212
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
env,

Тьфу, блин. Вот так.

Код: plsql
1.
2.
3.
4.
5.
set long 9999
set lines 400
set pages 0
select xmltype('<root>'||tcl.xmlout||'</root>') x
from scott.trancreationlog tcl where tcl.id = 423635115;
...
Рейтинг: 0 / 0
28.05.2018, 17:11
    #39651229
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzz,

И помедитируй на
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select x.*
from test tcl,
 xmltable(
       '/root/block'
       passing
       xmltype('<root>'||replace(replace(tcl.xmlout,'&gt;','>'),'&lt;','<')||'</root>'
              )
       columns 
         "number","errorcode","errortext"
       ) x;


на своём примере
...
Рейтинг: 0 / 0
28.05.2018, 17:16
    #39651240
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzz,

Код: plsql
1.
&lt;block&gt;

и
GroMoZeKazzz<block>разные вещи
...
Рейтинг: 0 / 0
28.05.2018, 18:11
    #39651290
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
env , на примере работает ок, а на базе нет :)
На базе заходит такой рейлейс
Код: sql
1.
replace(replace(tcl.xmlout,chr(38)||'gt;','>'),chr(38)||'lt;','<')

.
...
Рейтинг: 0 / 0
28.05.2018, 19:01
    #39651315
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
Откуда одна лишняя пустая строка не пойму только...
...
Рейтинг: 0 / 0
30.05.2018, 10:10
    #39652278
anvano
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzz env , на примере работает ок, а на базе нет :)
На базе заходит такой рейлейс
Код: sql
1.
replace(replace(tcl.xmlout,chr(38)||'gt;','>'),chr(38)||'lt;','<')

.

Зачем replace? У вас там только эти теги что-ли?

dbms_xmlgen.convert ( tcl.xmlout , dbms_xmlgen.ENTITY_DECODE )
уже отменили?
...
Рейтинг: 0 / 0
04.06.2018, 15:49
    #39654996
GroMoZeKazzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
anvano, не взлетает.
Пробовал:
Код: plsql
1.
dbms_xmlgen.convert(cast(tcl.xmlout as varchar2(4000)),dbms_xmlgen.ENTITY_DECODE)


и просто
Код: plsql
1.
dbms_xmlgen.convert(tcl.xmlout,dbms_xmlgen.ENTITY_DECODE)


В обоих случаях ошибка: ORA-06553: PLS-221: 'ENTITY_DECODE' is not a procedure or is undefined.
...
Рейтинг: 0 / 0
04.06.2018, 16:16
    #39655039
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzzВ обоих случаях ошибка: ORA-06553: PLS-221: 'ENTITY_DECODE' is not a procedure or is undefined.
В селекте? Тогда значение константы придется прописать явно, заглянув в спецификацию пакета.
...
Рейтинг: 0 / 0
04.06.2018, 16:29
    #39655056
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить часть xml-стоки
GroMoZeKazzz,

0/1
Код: 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.
SQL> select dbms_xmlgen.convert(
  2  '<?xml version="1.0"?>
  3  <ROWSET>
  4   <ROW>
  5    <DUMMY>X</DUMMY>
  6   </ROW>
  7  </ROWSET>
  8  ',0) s from dual
  9  /

S
--------------------------------------------------------------------------------
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;ROWSET&gt;
 &lt;ROW&gt;
  &lt;DUMMY&gt;X&lt;/DUMMY&gt;
 &lt;/ROW&gt;
&lt;/ROWSET&gt;



SQL> ed
Wrote file afiedt.buf

  1  select dbms_xmlgen.convert(
  2  '&lt;?xml version=&quot;1.0&quot;?&gt;
  3  &lt;ROWSET&gt;
  4   &lt;ROW&gt;
  5    &lt;DUMMY&gt;X&lt;/DUMMY&gt;
  6   &lt;/ROW&gt;
  7  &lt;/ROWSET&gt;
  8  ',1) s
  9* from dual
SQL> /

S
--------------------------------------------------------------------------------
<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <DUMMY>X</DUMMY>
 </ROW>
</ROWSET>



....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вытащить часть xml-стоки / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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