我有一个SQL查询,它返回两列包含如下数据:。
State Name
------- ---------
Online Terminal1
Offline Terminal2
Online Terminal3
Online Terminal4
现在我想创建一个运行SQL查询的XML文件。 XML文件结构必须如下:
<?xml version="1.0" encoding="utf-8" ?>
<Terminallist name="xml data">
<Value id="0">
<Terminal>Terminal1</Terminal>
<State>Online</State>
</Value>
<Value id="1">
<Terminal>Terminal2</Terminal>
<State>Offline</State>
</Value>
<Value id="2">
<Terminal>Terminal3</Terminal>
<State>Online</State>
</Value>
<Value id="3">
<Terminal>Terminal4</Terminal>
<State>Online</State>
</Value>
</Terminallist>
我想将XML文件保存到像c:/file.xml
这样的目录。
答案 0 :(得分:2)
答案: -
表名:temptable
表格中的数据:
查询: -
<StackLayout Orientation="Horizontal" x:Name="lblStack"/>
输出: -
SELECT XMLElement("Terminallist ", XMLAttributes('xml data' AS "name"),XMLAgg(XMLElement("value ", XMLAttributes(rownum AS "id"),XMLForest(Terminal,state))))
FROM temptable ;
由于 Narendar
答案 1 :(得分:0)
此解决方案使用WITH子句根据需要生成ID,从0开始。使用分析row_number()
函数在结果集中提供有保证的排序顺序。
注意:XMLRoot()
已弃用,作为XML / SQL标准的一部分,但会生成您要求的版本标头。 Find out more
with cte as (
select row_number() over (order by name) - 1 as id
, name
, state
from terminals
)
SELECT xmlroot (
XMLElement(
"Terminallist",
XMLAttributes( 'xml data' as "name"),
XMLAgg(XMLElement("Value",
XMLAttributes(cte.id as "id"),
XMLElement("Terminal",cte.name),
XMLElement("State",cte.state)
)
)
)
, version '1.0' )
FROM cte
order by cte.id
/
这是输出:
<?xml version="1.0"?>
<Terminallist name="xml data">
<Value id="0">
<Terminal>Terminal1</Terminal>
<State>Online</State>
</Value>
<Value id="1">
<Terminal>Terminal2</Terminal>
<State>Offline</State>
</Value>
<Value id="2">
<Terminal>Terminal3</Terminal>
<State>Online</State>
</Value>
<Value id="3">
<Terminal>Terminal4</Terminal>
<State>Online</State>
</Value>
</Terminallist>
至于将输出写入文件,这取决于您希望如何调用SQL。如果您从SQL * Plus运行它并想要将其保存到本地文件,请使用SPOOL。如果从PL / SQL运行,您需要使用UTL_FILE并写入数据库服务器上的目录。