powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как подсчитать количество тегов в XML запросом
13 сообщений из 13, страница 1 из 1
Как подсчитать количество тегов в XML запросом
    #36411441
Mike B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Подскажите как можно подсчитать кол-во тегов 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
Как подсчитать количество тегов в XML запросом
    #36411465
RТFМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XMLSequence
...
Рейтинг: 0 / 0
Как подсчитать количество тегов в XML запросом
    #36411498
VBR_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так
Код: 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
Как подсчитать количество тегов в XML запросом
    #36413386
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Период между сообщениями больше года.
Как подсчитать количество тегов в XML запросом
    #40005911
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. А подскажите, пожалуйста, как сразу при разборе и подсчитатьи количество тегов, и вставить данные из них. К данному примеру мне надо разобрать каждый 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
Как подсчитать количество тегов в XML запросом
    #40006009
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый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
Как подсчитать количество тегов в XML запросом
    #40006289
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что надо так , не в строки , а в столбцы
...
Рейтинг: 0 / 0
Как подсчитать количество тегов в XML запросом
    #40006299
Агрох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Как подсчитать количество тегов в XML запросом
    #40006387
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый2
Потому что надо так , не в строки , а в столбцы


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

SY.
...
Рейтинг: 0 / 0
Как подсчитать количество тегов в XML запросом
    #40006615
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методом тыка и перестановки буковок получилось совсем просто 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
Как подсчитать количество тегов в XML запросом
    #40006623
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый2,

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

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

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

SY.


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

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

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


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