其他数据库产品中是否有与MS SQL的'FOR XML PATH'等效的功能?

7

我目前正在使用微软的FOR XML PATH功能以XML格式从MS SQL Server中检索数据。我非常喜欢这个功能,但总是不太放心使用特定于供应商的函数。

其他主要数据库供应商是否有类似的功能?

编辑

让我更具体地说明我正在寻找的功能类型

在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

FOR XML PATH 不在 ANSI SQL-92 标准中,所以它将取决于各个厂商。我不知道 Oracle 或 MySQL 中是否有相当的功能。


2
PostgreSQL 8.3并没有专门的FOR XML PATH,但它的XML函数(请参阅手册第9.14节,特别是9.14.3)似乎提供了非常相似的功能。

谢谢提供链接。经过快速查看,似乎ProgreSQL在输出XML的形式上有所限制。而FOR XML PATH则提供了很多关于XML格式的灵活性。 - Darrel Miller

1

Oracle在其数据库中有完整的XML处理包。您甚至可以将XML直接存储到数据库中(无需INSERTS),并查询它。请参见:如何使用Oracle格式化xml 中的一些示例。

这里是其中一个示例:

    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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接