powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование distinct-values в Xquery
18 сообщений из 18, страница 1 из 1
Использование distinct-values в Xquery
    #39503794
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня!

Столкнулся с непонятной проблемой, которую не могу побороть. Использую в запросе xmltable и анализирую XML данные. В запросе использую конструкцию (спасибо ребятам на форуме, вчера подсказали, одну вещь):
Код: plsql
1.
let $k := string-join( distinct-values( $i/phone ), "," )


Так вот странность заключается в том, что все отлично работает и distinct-values отрабатывает, оставляя только уникальные значения, если я в запросе в качестве примера создаю источник XMLTYPE с моим тестовым наброском XML. Как только записываю XML в базу в поле типа XMLTYPE, то в результате $k, из кода выше всегда принимает, значение первой записи и пишет значение в этом поле по всем другим записям в выборке.
Может дело в индексах, которых нет в базе нет?....
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503803
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. вы запрос отрабатывает правильно, если вы указываете xml явно, и не отрабатывает правильно, если вы этот xml записываете в таблицу?
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503804
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

И снова, здравствуй.
Покажи листинг sqlplus в котором будет desc таблицы, запись в поле и запрос на получение данных из поля таблицы.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503808
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Азагаш,

Да. Все именно так.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503809
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,
Хорошо. Честно скажу дампы ни разу не делал. Попробую. )
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503812
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

Дампов не требуется.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503815
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

Что-то навроде
Код: 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.
SQL>create table dropme_t (x xmltype);

Table DROPME_T created.

SQL>desc dropme_t;

Name Null Type           
----- ---- -------------- 
X         PUBLIC.XMLTYPE

SQL>select xx.p from xmltable('/r' passing xmltype('<r><p>1</p><p>1</p><p>2</p></r>') columns p varchar2(50) path 'string-join(distinct-values(p), ",")') xx;

P                                                
--------------------------------------------------
1,2 

SQL>insert into dropme_t(x) values(xmltype('<r><p>1</p><p>1</p><p>2</p></r>'));

1 row inserted.

SQL>select xx.p from dropme_t t, xmltable('/r' passing t.x columns p varchar2(50) path 'string-join(distinct-values(p), ",")') xx;

P                                                
--------------------------------------------------
1,2 

SQL>drop table dropme_t;

Table DROPME_T dropped.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503819
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- Create table
create table DOL_TESTXML
(
  id   NUMBER,
  data XMLTYPE
)
tablespace T_USR
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    next 8
    minextents 1
    maxextents unlimited
  );



Собственно запрос:
Код: 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.
   SELECT x.*
   FROM   dol_testxml d,
          XMLTABLE ('for $d in //Раздел2
                       let $kod_doc_z := distinct-values( $d/СведОперация/ОснованиеОп/КодДок )
                      return <r><kk>{string-join( $kod_doc_z, ", " )}</kk></r>'
                      PASSING 
                      
                      d.data                                -- Вариант, который не работает
/*                      
                      XMLTYPE(                                -- Вариант, который работает
                      '<?xml version="1.0" encoding="ISO-8859-5"?>
                      <СообщОтказ_115ФЗ>
                        <СлужЧасть>
                          <ВерсияФормата>1.1</ВерсияФормата>
                          <ДатаСообщения>17/07/2017</ДатаСообщения>
                          <ТелОператор>8(495) 957-82-92</ТелОператор>
                          <ЭлектроннаяПочта>svc_550P@cbr.ru<;/ЭлектроннаяПочта>
                        </СлужЧасть>
                        <ИнформЧасть>
                          <Раздел2>
                            <СведОперация>
                              <ОснованиеОп>
                                <КодДок>2</КодДок>
                                <m>1</m>
                                <НаимДок>Расходный кассовый ордер</НаимДок>
                                <ДатаДок>01/02/2017</ДатаДок>
                              </ОснованиеОп>
                            </СведОперация>
                          </Раздел2>
                          <Раздел2>
                            <СведОперация>
                              <ОснованиеОп>
                                <КодДок>4</КодДок>
                                <m>3</m>
                                <НаимДок>Иное</НаимДок>
                                <ИноеНаимДок>анкета зарегистрированного лица</ИноеНаимДок>
                                <ДатаДок>06/02/2017</ДатаДок>
                                <НомДок>170206-1193</НомДок>
                              </ОснованиеОп>
                              <ОснованиеОп>
                                <КодДок>5</КодДок>
                                <m>4</m>
                                <НаимДок>Иное</НаимДок>
                                <ИноеНаимДок>заявление на открытие счета</ИноеНаимДок>
                                <ДатаДок>06/02/2017</ДатаДок>
                              </ОснованиеОп>
                            </СведОперация>
                          </Раздел2>
                        </ИнформЧасть>
                      </СообщОтказ_115ФЗ>')
*/                      
                      COLUMNS r8_4_1 VARCHAR2( 8) PATH 'kk' ) x
                      WHERE d.id =3
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503821
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть подозрения, что парсеру срывает голову от обилия кририллицы в названии тэгов. Но вот как-то так пишут описывает форматы наше ЦБ... Импортозамещение однако.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503827
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontesЕсть подозрения, что парсеру срывает голову от обилия кририллицы в названии тэгов. Но вот как-то так пишут описывает форматы наше ЦБ... Импортозамещение однако.
проверить версию ж просто, заменить теги "на латиницу"

......
stax
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503833
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

Странно, что оно что-то возвращает вообще.

Т.к. с точки зрения парсера xmltype поиск идёт по xpath в кодировке БД в документе с кодировкой ISO-8859-5.
Хрустальный шар подсказывает, что они не совпадают.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503837
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Хотя, как ни странно в 11g, /*+ NO_XML_QUERY_REWRITE*/ прибивает всё гвоздями на место.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503838
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Обязательно проверю. Решил засушить проблему. Все равно мне результат нужно обрабатывать в теле PL/SQL, а хранить мне XML в базе, пока нужды нет. Я использовал хранение в базе временно для тестов, чтобы была возможность проверить работу на больших файлах.
Но сам факт. И не ругается, собака, а просто нагло врет )
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503842
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

На 11.2.0.4 без хинта с таблицей
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
---------------------------------------------------------------------------------
| Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |          | 16360 |    31M|    43   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE      |          |     1 |  2002 |            |          |
|   2 |   VIEW               |          | 16360 |    31M|    40   (3)| 00:00:01 |
|   3 |    SORT UNIQUE       |          | 16360 | 32720 |    40   (3)| 00:00:01 |
|   4 |     XPATH EVALUATION |          |       |       |            |          |
|   5 |  NESTED LOOPS        |          | 16360 |    31M|    43   (0)| 00:00:01 |
|   6 |   TABLE ACCESS FULL  | DROPME_T |     1 |  2002 |     4   (0)| 00:00:01 |
|   7 |   XPATH EVALUATION   |          |       |       |            |          |
---------------------------------------------------------------------------------


С хинтом
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
----------------------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          | 16360 |    31M|    43   (0)| 00:00:01 |
|   1 |  NESTED LOOPS         |          | 16360 |    31M|    43   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL   | DROPME_T |     1 |  2002 |     4   (0)| 00:00:01 |
|   3 |   XMLTABLE EVALUATION |          |       |       |            |          |
----------------------------------------------------------------------------------



Скорее всего проблема возникает на шаге SORT UNIQUE при XPATH EVALUATION и связана с перекодировками русских букв.
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503843
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

С хинтом все работает!!! Пошел читать по хинту. Спасибо!!!
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503849
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,
при записе в базу
<?xml version="1.0" encoding="ISO-8859-5"?>
меняется на
<?xml version="1.0" encoding="WINDOWS-1251"?>

так задумано?

.....
stax
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503858
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав, в комьюнити, когда разбирали этот вопрос пришли к выводу, что это преобразование на фетче.

тут
...
Рейтинг: 0 / 0
Использование distinct-values в Xquery
    #39503866
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envСтанислав, в комьюнити, когда разбирали этот вопрос пришли к выводу, что это преобразование на фетче.

тут

спасибо

да, зависит от кодировки на клиенте
<?xml version="1.0" encoding="CP866"?>

зы
мог и сам догадаться

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


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