2016-09-10 143 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;