我目前正在使用Microsoft的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的函数来生成任意深度的树。
答案 0 :(得分:2)
FOR XML PATH
不符合ANSI SQL-92标准,因此将取决于各个供应商。我不知道Oracle或MySQL中的任何等价物。
答案 1 :(得分:2)
PostgreSQL 8.3没有专门的FOR XML PATH
,但其XML函数(参见section 9.14 of the manual,特别是9.14.3)似乎提供了非常相似的功能。
答案 2 :(得分:0)
Oracle在其数据库中有一整套XML处理包。您甚至可以将XML直接存储到数据库中(无INSERTS)并进行查询。有关示例,请参阅:How to format xml with 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>