Есть ли в других продуктах баз данных эквивалент MS SQL 'FOR XML PATH'? - PullRequest
7 голосов
/ 20 марта 2009

В настоящее время я использую функцию Microsoft FOR XML PATH для извлечения данных из MS SQL Server в формате XML. Мне действительно нравится эта функция, но мне всегда неудобно использовать функции, специфичные для поставщика.

У кого-нибудь из других крупных поставщиков баз данных есть что-то подобное?

Редактировать

Позвольте мне быть более точным с типом функций, которые я ищу

В MS SQL вы можете использовать этот запрос

SELECT so.id AS '@Id',
       so.Code AS '@Code',  
       cu.Code AS 'Customer/@Code',
       cu.Name AS 'Customer/@Name',
       (SELECT Item_Num AS '@Item',
                pa.Code AS '@PartCode'
        FROM tblSalesItem si
            LEFT JOIN tblPart pa ON pa.Id = si.Part_Id
        WHERE si.SalesOrder_ID = so.Id 
        FOR XML PATH('SalesItem') , type) 
FROM tblSalesOrder so
    JOIN tblCustomer cu ON so.customer_id = cu.ID
FOR XML PATH('SalesOrder'), ROOT('SalesOrders')

для генерации этого XML

<SalesOrders>
  <SalesOrder Id="13" Code="C1002     ">
    <Customer Code="ROBERTS   " Name="Roberts Equipment  Inc." />
    <SalesItem Item="1" PartCode="FP-0001" />
    <SalesItem Item="2" PartCode="FP-0003" />
  </SalesOrder>
  <SalesOrder Id="15" Code="C1004     ">
    <Customer Code="EXBEL-LIFTS" Name="Exbel Lifts Inc." />
    <SalesItem Item="1" />
  </SalesOrder>
</SalesOrders>

Я могу контролировать использование элементов и атрибутов для каждого столбца. Я могу создавать атрибуты элементов для группировки связанных столбцов вместе. Я могу использовать подзапросы для генерации вложенных элементов. Вы даже можете использовать функции, которые возвращают XML, для генерации деревьев произвольной глубины.

Ответы [ 3 ]

2 голосов
/ 20 марта 2009

PostgreSQL 8.3 специально не имеет FOR XML PATH, но его функции XML (см. раздел 9.14 руководства , в частности 9.14.3 ), по-видимому, обеспечивают очень похожую функциональность.

2 голосов
/ 20 марта 2009

FOR XML PATH не соответствует стандарту ANSI SQL-92, поэтому он будет зависеть от отдельных поставщиков. Я не знаю ни одного эквивалента в Oracle или MySQL.

0 голосов
/ 20 марта 2009

Oracle имеет целый пакет для обработки XML в своих базах данных. Вы даже можете хранить XML прямо в базе данных (без INSERTS) и запрашивать его. См. Как отформатировать XML с помощью Oracle для некоторых примеров.

Вот один из примеров:

    SQL> select dbms_xmlgen.getxml('select employee_id, first_name,
  2  last_name, phone_number from employees where rownum < 6') xml
  3  from dual

<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <EMPLOYEE_ID>100</EMPLOYEE_ID>
  <FIRST_NAME>Steven</FIRST_NAME>
  <LAST_NAME>King</LAST_NAME>
  <PHONE_NUMBER>515.123.4567</PHONE_NUMBER>
 </ROW>
 <ROW>
  <EMPLOYEE_ID>103</EMPLOYEE_ID>
  <FIRST_NAME>Alexander</FIRST_NAME>
  <LAST_NAME>Hunold</LAST_NAME>
  <PHONE_NUMBER>590.423.4567</PHONE_NUMBER>
 </ROW>
 <ROW>
  <EMPLOYEE_ID>104</EMPLOYEE_ID>
  <FIRST_NAME>Bruce</FIRST_NAME>
  <LAST_NAME>Ernst</LAST_NAME>
  <PHONE_NUMBER>590.423.4568</PHONE_NUMBER>
   </ROW>
  </ROWSET>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...