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

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


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

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

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

Дампов не требуется.
...
Рейтинг: 0 / 0
11.08.2017, 09:10
    #39503815
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование distinct-values в Xquery
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
11.08.2017, 09:15
    #39503819
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование distinct-values в Xquery
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
11.08.2017, 09:20
    #39503821
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование distinct-values в Xquery
Есть подозрения, что парсеру срывает голову от обилия кририллицы в названии тэгов. Но вот как-то так пишут описывает форматы наше ЦБ... Импортозамещение однако.
...
Рейтинг: 0 / 0
11.08.2017, 09:31
    #39503827
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование distinct-values в Xquery
admontesЕсть подозрения, что парсеру срывает голову от обилия кририллицы в названии тэгов. Но вот как-то так пишут описывает форматы наше ЦБ... Импортозамещение однако.
проверить версию ж просто, заменить теги "на латиницу"

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

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

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

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

Обязательно проверю. Решил засушить проблему. Все равно мне результат нужно обрабатывать в теле PL/SQL, а хранить мне XML в базе, пока нужды нет. Я использовал хранение в базе временно для тестов, чтобы была возможность проверить работу на больших файлах.
Но сам факт. И не ругается, собака, а просто нагло врет )
...
Рейтинг: 0 / 0
11.08.2017, 10:01
    #39503842
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование distinct-values в Xquery
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
11.08.2017, 10:04
    #39503843
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование distinct-values в Xquery
env,

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

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

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

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

тут

спасибо

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

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

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


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