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

Есть проблема с которой бьюсь, но не могу разобраться. Решил попросить помощь здесь. Есть такой запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select j.url, extractvalue( k.x, j.url ) v1, extractvalue( k.x, '/h[1]/r[1]/ogrn[1]/text()[1]' ) v2
from (  select
                xmltype(
                        '<h>
                             <r>
                               <inn>111111111</inn>
                               <ogrn>0000000000</ogrn>
                             </r>
                           </h>'     
                        ) x
         from dual ) k,
     xmltable( '/'
               PASSING xmltype( '<a><b>/h[1]/r[1]/ogrn[1]/text()[1]</b></a>' )
               COLUMNS  
                      url VARCHAR2(250) PATH '//b' ) j



В поле v1 должно вывестись значение ogrn из xml-файла, путь до которого получен через разбор другой xml, в поле v2 выводится вызов extractvalue, в которое вторым параметром передано значение константой и это поле инициализируется в отличие от v1.
В первом варианте выводится пустое значение, хотя url определился правильно, о чем свидетельствует вывод поля j.url

Подскажите, в чем проблема?
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635188
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> col url format a30
SQL> col v1 format a10
SQL> col v2 format a10
SQL> /

URL                            V1         V2
------------------------------ ---------- ----------
/h[1]/r[1]/ogrn[1]/text()[1]   0000000000 0000000000


....
stax
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635210
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Не работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> col url format a30;
SQL> col v1 format a10;
SQL> col v2 format a10;
SQL> select j.url, extractvalue( k.x, j.url ) v1, extractvalue( k.x, '/h[1]/r[1]/ogrn[1]/text()[1]' ) v2
  2  from (  select
  3                  xmltype(
  4                          '<h>
  5                               <r>
  6                                 <inn>111111111</inn>
  7                                 <ogrn>0000000000</ogrn>
  8                               </r>
  9                             </h>'
10                          ) x
11           from dual ) k,
12       xmltable( '/'
13                 PASSING xmltype( '<a><b>/h[1]/r[1]/ogrn[1]/text()[1]</b></a>' )
14                 COLUMNS
15                        url VARCHAR2(250) PATH '//b' ) j
16  /

URL                            V1         V2
------------------------------ ---------- ----------
/h[1]/r[1]/ogrn[1]/text()[1]              0000000000
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635214
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
admontes,
Чтобы развеять проблемы с отображением сделал так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select j.url, case when extractvalue( k.x, j.url ) is null then 'null' else 'not null' end v1, extractvalue( k.x, '/h[1]/r[1]/ogrn[1]/text()[1]' ) v2
from (  select
                xmltype(
                        '<h>
                             <r>
                               <inn>111111111</inn>
                               <ogrn>0000000000</ogrn>
                             </r>
                           </h>'     
                        ) x
         from dual ) k,
     xmltable( '/'
               PASSING xmltype( '<a><b>/h[1]/r[1]/ogrn[1]/text()[1]</b></a>' )
               COLUMNS  
                      url VARCHAR2(250) PATH '//b' ) j



В результате v1=null :(
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635217
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

Проверил на livesql.oracle.com - работает
Там 12с помоему
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select j.url, extractvalue( k.x, j.url ) v1, extractvalue( k.x, '/h[1]/r[1]/ogrn[1]/text()[1]' ) v2
from (  select
                xmltype(
                        '<h>
                             <r>
                               <inn>111111111</inn>
                               <ogrn>0000000000</ogrn>
                             </r>
                           </h>'     
                        ) x
         from dual ) k,
     xmltable( '/'
               PASSING xmltype( '<a><b>/h[1]/r[1]/ogrn[1]/text()[1]</b></a>' )
               COLUMNS url VARCHAR2(250) PATH '//b' ) j

URL	V1	V2
/h[1]/r[1]/ogrn[1]/text()[1]	0000000000	0000000000


а почему text()[1] - как бы подразумевая что будет больше одного?
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635237
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Этот запрос выжимка из другого, там используются результаты из xmldiff. Это он такие пути рисует.

Чувствую, что у меня проблема с кодировкой....
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635437
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontes,

у меня на 11.2.0.4 заработал "правильно" с хинтом
FORCE_XML_QUERY_REWRITE
Код: 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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL> col url format a30
SQL> col v1 format a10
SQL> col v2 format a10
SQL>
SQL> SELECT j.url
  2        ,extractvalue(k.x, j.url) v1
  3        ,extractvalue(k.x, '/h[1]/r[1]/ogrn[1]/text()[1]') v2
  4  FROM   (SELECT     xmltype('<h>
  5                               <r>
  6                                 <inn>111111111</inn>
  7                                 <ogrn>0000000000</ogrn>
  8                               </r>
  9                             </h>') x
 10          FROM   dual) k
 11        ,xmltable('/' passing
 12                  xmltype('<a><b>/h[1]/r[1]/ogrn[1]/text()[1]</b></a>')
 13                  columns url VARCHAR2(250) path '//b') j;

URL                            V1         V2
------------------------------ ---------- ----------
/h[1]/r[1]/ogrn[1]/text()[1]              0000000000


Execution Plan
----------------------------------------------------------
Plan hash value: 4223128547

-----------------------------------------------------------------------------
| Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |      | 16360 | 32720 |    24   (0)| 00:00:01 |
|   1 |  XMLTABLE EVALUATION |      |       |       |            |          |
-----------------------------------------------------------------------------

Note
-----
   - Unoptimized XML construct detected (enable XMLOptimizationCheck for more information)

SQL>
SQL> SELECT /*+ FORCE_XML_QUERY_REWRITE */ j.url
  2        ,extractvalue(k.x, j.url) v1
  3        ,extractvalue(k.x, '/h[1]/r[1]/ogrn[1]/text()[1]') v2
  4  FROM   (SELECT     xmltype('<h>
  5                               <r>
  6                                 <inn>111111111</inn>
  7                                 <ogrn>0000000000</ogrn>
  8                               </r>
  9                             </h>') x
 10          FROM   dual) k
 11        ,xmltable('/' passing
 12                  xmltype('<a><b>/h[1]/r[1]/ogrn[1]/text()[1]</b></a>')
 13                  columns url VARCHAR2(250) path '//b') j;

URL                            V1         V2
------------------------------ ---------- ----------
/h[1]/r[1]/ogrn[1]/text()[1]   0000000000 0000000000


Execution Plan
----------------------------------------------------------
Plan hash value: 4083502163

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                       | 16360 | 32720 |    24   (0)| 00:00:01 |
|   1 |  COLLECTION ITERATOR PICKLER FETCH| XQSEQUENCEFROMXMLTYPE | 16360 | 32720 |    24   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Note
-----
   - Unoptimized XML construct detected (enable XMLOptimizationCheck for more information)

...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635444
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Demenko,
Спасибо за совет. Завтра на работе попробую и отпишусь. У меня 12c.
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39635726
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Demenko,
Еще раз спасибо, все работает!
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39636072
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admontesMaxim Demenko,
Еще раз спасибо, все работает!

А ничего что EXTRACVALUE deprecated еще в 11G?

SY.
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39636710
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYadmontesMaxim Demenko,
Еще раз спасибо, все работает!

А ничего что EXTRACVALUE deprecated еще в 11G?

SY.
Да бесполезно. Дед мой их юзал, отец, и дети мой будут.
...
Рейтинг: 0 / 0
Передача параметров в extractvalue
    #39637118
admontes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
Это да. Привычка. ) Перепишем на более кошерный вариант )
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача параметров в extractvalue
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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