Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как подсчитать количество тегов в XML запросом / 13 сообщений из 13, страница 1 из 1
15.01.2010, 09:40
    #36411441
Mike B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
Добрый день,

Подскажите как можно подсчитать кол-во тегов ACCOUNT SQL-ЗАПРОСОМ в XML следующего вида, для дальнейшего обращения к этим тегам по индексу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<ROOT typedoc="ACCOUNTS">
  <ACCOUNTS>
    <ACCNUM> 1 </ACCNUM>
    <ACCPLCH> 1 </ACCPLCH>
    <ACCNAME>Счет1</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM> 2 </ACCNUM>
    <ACCPLCH> 2 </ACCPLCH>
    <ACCNAME>Счет2</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM> 3 </ACCNUM>
    <ACCPLCH> 3 </ACCPLCH>
    <ACCNAME>Счет3</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM> 4 </ACCNUM>
    <ACCPLCH> 4 </ACCPLCH>
    <ACCNAME>Счет4</ACCNAME>
  </ACCOUNTS>
</ROOT>
...
Рейтинг: 0 / 0
15.01.2010, 10:02
    #36411465
RТFМ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
XMLSequence
...
Рейтинг: 0 / 0
15.01.2010, 10:18
    #36411498
VBR_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
Или так
Код: plaintext
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.
select xmltype.transform(
xmltype('<ROOT typedoc="ACCOUNTS">
  <ACCOUNTS>
    <ACCNUM>1</ACCNUM>
    <ACCPLCH>1</ACCPLCH>
    <ACCNAME>Счет1</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM>2</ACCNUM>
    <ACCPLCH>2</ACCPLCH>
    <ACCNAME>Счет2</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM>3</ACCNUM>
    <ACCPLCH>3</ACCPLCH>
    <ACCNAME>Счет3</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM>4</ACCNUM>
    <ACCPLCH>4</ACCPLCH>
    <ACCNAME>Счет4</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM>7</ACCNUM>
    <ACCPLCH>7</ACCPLCH>
    <ACCNAME>Счет7</ACCNAME>
  </ACCOUNTS>  
</ROOT>'),
 xmltype(
'<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:output method="text"/>
 <xsl:template match="*">         
 <xsl:value-of select="count(ACCOUNTS)"/>
 </xsl:template>
</xsl:stylesheet>')
).getstringval() cnt from dual
...
Рейтинг: 0 / 0
16.01.2010, 00:21
    #36413386
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
Код: plaintext
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.
SQL> with t as (
   2   select xmltype('<ROOT typedoc="ACCOUNTS">
  3    <ACCOUNTS>
  4      <ACCNUM>1</ACCNUM>
  5      <ACCPLCH>1</ACCPLCH>
  6      <ACCNAME>Счет1</ACCNAME>
  7    </ACCOUNTS>
  8    <ACCOUNTS>
  9      <ACCNUM>2</ACCNUM>
 10      <ACCPLCH>2</ACCPLCH>
 11      <ACCNAME>Счет2</ACCNAME>
 12    </ACCOUNTS>
 13    <ACCOUNTS>
 14      <ACCNUM>3</ACCNUM>
 15      <ACCPLCH>3</ACCPLCH>
 16      <ACCNAME>Счет3</ACCNAME>
 17    </ACCOUNTS>
 18    <ACCOUNTS>
 19      <ACCNUM>4</ACCNUM>
 20      <ACCPLCH>4</ACCPLCH>
 21      <ACCNAME>Счет4</ACCNAME>
 22    </ACCOUNTS>
 23  </ROOT>') x from dual)
  24   select y.column_value.getstringval() cnt
  25   from t,xmltable('count(/ROOT/ACCOUNTS)' passing t.x) y
  26   ;

CNT
---
 4 

Best regards

Maxim
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
06.10.2020, 18:02
    #40005911
новый2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
Добрый день. А подскажите, пожалуйста, как сразу при разборе и подсчитатьи количество тегов, и вставить данные из них. К данному примеру мне надо разобрать каждый ACCOUNTS в столбцы , а первым вывести их количество
Код: 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.
with t as (
   select xmltype('<ROOT typedoc="ACCOUNTS">
     <ACCOUNTS>
       <ACCNUM>1</ACCNUM>
       <ACCPLCH>1</ACCPLCH>
       <ACCNAME>Счет1</ACCNAME>
     </ACCOUNTS>
     <ACCOUNTS>
       <ACCNUM>2</ACCNUM>
       <ACCPLCH>2</ACCPLCH>
       <ACCNAME>Счет2</ACCNAME>
     </ACCOUNTS>
     <ACCOUNTS>
       <ACCNUM>3</ACCNUM>
       <ACCPLCH>3</ACCPLCH>
       <ACCNAME>Счет3</ACCNAME>
     </ACCOUNTS>
     <ACCOUNTS>
       <ACCNUM>4</ACCNUM>
       <ACCPLCH>4</ACCPLCH>
       <ACCNAME>Счет4</ACCNAME>
     </ACCOUNTS>
   </ROOT>') x from dual)
   select CNT,ACCNUM1,ACCPLCH1,ACCNAME1,ACCNUM2,ACCPLCH2,ACCNAME2,ACCNUM3,ACCPLCH3,ACCNAME3
   from t,xmltable('/ROOT' passing t.x
   columns
     --CNT number PATH 'ACCOUNTS/rowcount()',
      cnt for ORDINALITY,
      ACCNUM1   varchar2(10) PATH 'ACCOUNTS[1]/ACCNUM',
      ACCPLCH1  varchar2(10) PATH 'ACCOUNTS[1]/ACCPLCH',
      ACCNAME1  varchar2(10) PATH 'ACCOUNTS[1]/ACCNAME',
      ACCNUM2   varchar2(10) PATH 'ACCOUNTS[2]/ACCNUM',
      ACCPLCH2  varchar2(10) PATH 'ACCOUNTS[2]/ACCPLCH',
      ACCNAME2  varchar2(10) PATH 'ACCOUNTS[2]/ACCNAME',
      ACCNUM3   varchar2(10) PATH 'ACCOUNTS[3]/ACCNUM',
      ACCPLCH3  varchar2(10) PATH 'ACCOUNTS[3]/ACCPLCH',
      ACCNAME3  varchar2(10) PATH 'ACCOUNTS[3]/ACCNAME') ;
...
Рейтинг: 0 / 0
07.10.2020, 08:13
    #40006009
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
новый2,
почему не так
Код: plsql
1.
2.
3.
4.
5.
xmltable('ROOT/ACCOUNTS' passing t.x
   columns ACCNUM    varchar2(10) PATH 'ACCNUM',
      ACCPLCH  varchar2(10) PATH 'ACCPLCH',
      ACCNAME   varchar2(10) PATH 'ACCNAME' 
)
...
Рейтинг: 0 / 0
07.10.2020, 16:32
    #40006289
новый2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
Потому что надо так , не в строки , а в столбцы
...
Рейтинг: 0 / 0
07.10.2020, 16:50
    #40006299
Агрох
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в 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.
select 
    regexp_count('<ROOT typedoc="ACCOUNTS">
  <ACCOUNTS>
    <ACCNUM>1</ACCNUM>
    <ACCPLCH>1</ACCPLCH>
    <ACCNAME>Счет1</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM>2</ACCNUM>
    <ACCPLCH>2</ACCPLCH>
    <ACCNAME>Счет2</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM>3</ACCNUM>
    <ACCPLCH>3</ACCPLCH>
    <ACCNAME>Счет3</ACCNAME>
  </ACCOUNTS>
  <ACCOUNTS>
    <ACCNUM>4</ACCNUM>
    <ACCPLCH>4</ACCPLCH>
    <ACCNAME>Счет4</ACCNAME>
  </ACCOUNTS>
</ROOT>', 
'<ACCOUNTS>') 
from dual
...
Рейтинг: 0 / 0
07.10.2020, 20:29
    #40006387
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
новый2
Потому что надо так , не в строки , а в столбцы


А вот "так" только через reporting tool или если известно максимально возможное число ACCOUNTS.

SY.
...
Рейтинг: 0 / 0
08.10.2020, 16:06
    #40006615
новый2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
Методом тыка и перестановки буковок получилось совсем просто count('имя тега')
Может кому пригодиться

Код: 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.
with t as (
   select xmltype('<ROOT typedoc="ACCOUNTS">
     <ACCOUNTS>
       <ACCNUM>1</ACCNUM>
       <ACCPLCH>1</ACCPLCH>
       <ACCNAME>Счет1</ACCNAME>
     </ACCOUNTS>
     <ACCOUNTS>
       <ACCNUM>2</ACCNUM>
       <ACCPLCH>2</ACCPLCH>
       <ACCNAME>Счет2</ACCNAME>
     </ACCOUNTS>
     <ACCOUNTS>
       <ACCNUM>3</ACCNUM>
       <ACCPLCH>3</ACCPLCH>
       <ACCNAME>Счет3</ACCNAME>
     </ACCOUNTS>
     <ACCOUNTS>
       <ACCNUM>4</ACCNUM>
       <ACCPLCH>4</ACCPLCH>
       <ACCNAME>Счет4</ACCNAME>
     </ACCOUNTS>
   </ROOT>') x from dual)
   select CNT,ACCNUM1,ACCPLCH1,ACCNAME1,ACCNUM2,ACCPLCH2,ACCNAME2,ACCNUM3,ACCPLCH3,ACCNAME3
   from t,xmltable('/ROOT' passing t.x
   columns
     CNT number PATH 'count(ACCOUNTS)',     
      ACCNUM1   varchar2(10) PATH 'ACCOUNTS[1]/ACCNUM',
      ACCPLCH1  varchar2(10) PATH 'ACCOUNTS[1]/ACCPLCH',
      ACCNAME1  varchar2(10) PATH 'ACCOUNTS[1]/ACCNAME',
      ACCNUM2   varchar2(10) PATH 'ACCOUNTS[2]/ACCNUM',
      ACCPLCH2  varchar2(10) PATH 'ACCOUNTS[2]/ACCPLCH',
      ACCNAME2  varchar2(10) PATH 'ACCOUNTS[2]/ACCNAME',
      ACCNUM3   varchar2(10) PATH 'ACCOUNTS[3]/ACCNUM',
      ACCPLCH3  varchar2(10) PATH 'ACCOUNTS[3]/ACCPLCH',
      ACCNAME3  varchar2(10) PATH 'ACCOUNTS[3]/ACCNAME') ;


       CNT ACCNUM1    ACCPLCH1   ACCNAME1   ACCNUM2    ACCPLCH2   ACCNAME2   ACCNUM3    ACCPLCH3   ACCNAME3
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         4 1          1         Счет1      2          2          Счет2      3          3          Счет3
...
Рейтинг: 0 / 0
08.10.2020, 16:30
    #40006623
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
новый2,

Ну и зачем подсчитывать к-во если у тебя забито столбцов на 3 счета? И что будет если их будет 5?

SY.
...
Рейтинг: 0 / 0
08.10.2020, 16:51
    #40006631
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
SY
новый2,

Ну и зачем подсчитывать к-во если у тебя забито столбцов на 3 счета? И что будет если их будет 5?

SY.


мож и счетчик нужен для отлова "забито столбцов на 3" а счетов 5

типа показываем первых три из 5-ти

....
stax
...
Рейтинг: 0 / 0
08.10.2020, 17:36
    #40006642
K790
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как подсчитать количество тегов в XML запросом
Такое впечатление, что это реализация xmlpivot через гланды.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как подсчитать количество тегов в XML запросом / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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