2016-09-10 178 views
0

請指導我如何使用oracle sql查詢得到下面的輸出,並且輸出應該在一行和一列(單行列)中。使用oracle sql的XML輸出

<Row><Cell><Data ss:Type="String">SMITH</Data></Cell><Cell><Data ss:Type="String">800</Data></Cell></Row> <Row><Cell><Data ss:Type="String">ALLEN</Data></Cell><Cell><Data ss:Type="String">1600</Data></Cell></Row> 

我嘗試使用SQL語句,但我得到多行。

select 
'<Row>'||XMLELEMENT("Cell",XMLELEMENT("Data",xmlattributes('String' as "ss:Type"),ename))|| 
    XMLELEMENT("Cell",XMLELEMENT("Data",xmlattributes('String' as "ss:Type"),sal)) ||'</Row>' as "Result" from emp; 

在此先感謝

回答

0

您可以使用標準的封裝DBMS_XMLGEN.GETXML生成XML。

注: -

你應該有足夠的權限運行該程序包。如果您使用具有管理員權限的Oracle本地數據庫,則不應該有任何問題。

語法: -

select dbms_xmlgen.getxmltype(Your select query here) from dual; 

例子: -

SELECT dbms_xmlgen.getxmltype('select first_name, last_name, phone_number, email from employees where employee_id in (100,101)') 
FROM dual; 

如果您需要在輸出只有一行,您可以使用WHERE子句限制的rownum = 1輸出中的行數。

Convert SQL result to XML using standard package

+0

OP似乎需要的屬性爲好。你的例子是否支持這種情況? –

+0

它不返回屬性類型。但是,DBMS_XMLGEN.GETXMLTYPE生成XML文檔並將其作爲sys.XMLType返回。我相信你不需要在輸出中使用類型爲XML的類型。您可以定義架構(XSD)並在其他進程中使用數據。 – notionquest

0

使用XMLAGG()聚集行:

SELECT XMLAGG(
      XMLELEMENT(
      "Row", 
      XMLELEMENT(
       "Cell", 
       XMLELEMENT("Data",xmlattributes('String' as "ss:Type"),ename) 
      ), 
      XMLELEMENT(
       "Cell", 
       XMLELEMENT("Data",xmlattributes('String' as "ss:Type"),sal) 
      ) 
     ) 
     ).getClobVal() AS "Result" 
FROM emp;