:: Visual Foxpro, Foxpro for DOS
XMLTABLE в PostgreSQL 10: кто уже использовал?
rvc44
Автор

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
Кто-нибудь использовал XMLTABLE, конструкцию из SQL/XML (или как-то так), появившуюся в PostgreSQL 10:
www.postgresql.org, Пункт 9.14.3.3, xmltable
Был бы благодарен за любой примерчик использования этого нового функционала, совместно с VFP.

Хотелось бы вызывать что-то типа такого из VFP...
Вначале выдёргиваем все *Request-ы:

FOR _i IN SELECT * FROM xmltable(
XMLNAMESPACES(_ns_s3_directive AS s3d),
'(/*[not(s3d:Registry)] | //s3d:RecordContent/*)[
starts-with(namespace-uri(), "urn://x-artefacts-zags-")
]' PASSING _xml
COLUMNS
id Uuid PATH '@ИдСвед',
date Date PATH '@ДатаСвед',
xml Xml PATH '.',
-- Using two fields as only a single-node-result is accepted, despite giving the column an array type.
-- The type namespace may be defined only somewhere in the subtree, not at the context element.
-- Using string() as otherwise postgres crashes somewhere in libxml.
ns_root Text PATH 'string(namespace::*[starts-with(., "urn://x-artefacts-zags-")][contains(., "/root/")])',
ns_type Text PATH 'string(//namespace::*[starts-with(., "urn://x-artefacts-zags-")][contains(., "/types/")])',
name Text PATH 'local-name()',
-- Despite the documentation, the "name" column can't be referenced.
type Text DEFAULT NULL,
records Int PATH 'string(count(*))'
) LOOP

где _xml это входящий параметр функции, _ns_s3_directive uri того же ns, что и в PHP.
Они потом кладутся в отдельную таблицу
А потом раздербанивается на записи:

EXECUTE format(
$$INSERT INTO Records_Xml$%s (
package_id, index, xml, number, date, registry_code, status_code, status_date
)
SELECT pl.id, xmltable.* FROM Package_List AS pl, xmltable(
XMLNAMESPACES(pl.ns_root AS rns, pl.ns_type AS tns),
'*' PASSING pl.xml
COLUMNS
index Int PATH 'string(count(preceding-sibling::*) + 1)',
xml Xml PATH '.',
number Text PATH '@НомерЗапис',
date Date PATH '@ДатаЗапис',
registry_code Text PATH 'rns:ОрганЗАГС/@КодЗАГС',
status_code Text PATH 'rns:СтатусЗаписи/@КодСтатус',
status_date Date PATH 'rns:СтатусЗаписи/@ДатаНачСтатус'
)
WHERE pl.id = $1
ON CONFLICT (package_id, index) DO UPDATE SET
updated_at = now(),
xml = EXCLUDED.xml,
number = EXCLUDED.number,
date = EXCLUDED.date,
registry_code = EXCLUDED.registry_code,
status_code = EXCLUDED.status_code,
status_date = EXCLUDED.status_date
$$,
_i.type
)
USING _i.id;

Возможно подобное дёргать из VFP ?
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 24 (Гостей: 24)

© 2000-2024 Fox Club 
Яндекс.Метрика