powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / xpath_table некорректно формирует таблицу
4 сообщений из 4, страница 1 из 1
xpath_table некорректно формирует таблицу
    #39006077
belove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
CREATE TEMP TABLE tmp_tbl (id INTEGER, xml text) 
ON COMMIT DROP;

insert into tmp_tbl (id, xml)
select 2 AS id, '[SRC XML]<DATA ORG_ID="1"><RECORD><RECORD_ID>1</RECORD_ID><TITLE>Запись1</TITLE></RECORD><RECORD><RECORD_ID>2</RECORD_ID><TITLE>Запись2</TITLE></RECORD></DATA>

' as xml;

select *
from xpath_table('id', 'xml', 'tmp_tbl',
'//DATA/@ORG_ID|//DATA/RECORD/RECORD_ID|//DATA/RECORD/TITLE',
'1=1')
AS t (org_id integer, record_id integer, title varchar(20));
[/SRC]

Результат запроса:
2;1;"1"
2;;"2"

Вместо:
1;1;"Запись1"
1;2;"Запись2"


Что не так ? Почему в первую колонку выводится id темповой таблицы ? И почему DATA/@ORG_ID не размножается на все записи ?
...
Рейтинг: 0 / 0
xpath_table некорректно формирует таблицу
    #39006250
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beloveРезультат запроса:
2;1;"1"
2;;"2"
2 ты сам указал в инсерте как id, а списке полей AS не указал.
и да, не стоит ожидать от убогой функции, что она по нескольким xpath вычислит между ними корреляцию и заполнит верхнеуровневое значение на подуровни.
...
Рейтинг: 0 / 0
xpath_table некорректно формирует таблицу
    #39006481
belove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2., а как надо ?
...
Рейтинг: 0 / 0
xpath_table некорректно формирует таблицу
    #39006547
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для единственного DATA можно так
Код: sql
1.
2.
3.
4.
5.
6.
select id, 
   (xpath('/DATA/@ORG_ID', xml::xml))[1]::text::integer org_id,
   (xpath('/RECORD/RECORD_ID/text()', t.x))[1]::text::integer record_id,
   (xpath('/RECORD/TITLE/text()', t.x))[1]::text title
from tmp_tbl,
lateral unnest(xpath('/DATA/RECORD', xml::xml)) as t(x)

если он не верхнеуровневый и повторяется, то его тоже как lateral и нижний xpath с условием на DATA.
можно еще сначала xml трансформировать в более реляционно-плоский.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / xpath_table некорректно формирует таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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