[英]How can I use XMLAgg function without an alias in the following SQL example?:
我必须使XML符合我无法控制的格式。 它包含一个名为DateRange的标头,然后是查询中的记录。 我可以生成几乎与该格式匹配的XML,不同之处在于我的版本在一个元素(本示例中为DIV)中具有记录:
select
XMLRoot(
XMLElement(
"PayrollAdjustments",
XMLForest(
XMLForest(
'2013-09-15' as "From",
'2013-09-21' as "To"
) as "DateRange",
XMLAgg(
XMLForest(
XMLForest(
EMPLOYEE as "EmployeeId",
STORE AS "StoreNumber",
DEPARTMENT AS "Department",
WORKCODE AS "AdjustCode",
PAYROLL_DATE AS "PayDate",
HOURS as "Hours",
0 as "Amount"
) AS "PayAdjustment"
)
) AS div
)
),
VERSION '1.0" encoding="utf-8',
STANDALONE YES
).getClobVal()
from timecard_payroll
where start_date = '2013-09-15'
and end_date = '2013-09-21'
and hours > 0;
这是输出的样子,如您所见,记录位于名为DIV的元素中:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<PayrollAdjustments>
<DateRange>
<From>2013-09-15</From>
<To>2013-09-21</To>
</DateRange>
<DIV>
<PayAdjustment>
<EmployeeId>262699</EmployeeId>
<StoreNumber>8159</StoreNumber>
<Department>1</Department>
<AdjustCode>91</PayAdjustCode>
<PayDate>2013-09-16</PayDate>
<Hours>8.0000</Hours>
<Amount>0</Amount>
</PayAdjustment>
<PayAdjustment>
<EmployeeId>262916</EmployeeId>
<StoreNumber>8294</StoreNumber>
<Department>5</Department>
<AdjustCode>91</AdjustCode>
<PayDate>2013-09-19</PayDate>
<Hours>8.0000</Hours>
<Amount>0</Amount>
</PayAdjustment>
</DIV>
</PayrollAdjustments>
如何更改查询以摆脱DIV元素,使其看起来像这样?:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<PayrollAdjustments>
<DateRange>
<From>2013-09-15</From>
<To>2013-09-21</To>
</DateRange>
<PayAdjustment>
<EmployeeId>262699</EmployeeId>
<StoreNumber>8159</StoreNumber>
<Department>1</Department>
<AdjustCode>91</PayAdjustCode>
<PayDate>2013-09-16</PayDate>
<Hours>8.0000</Hours>
<Amount>0</Amount>
</PayAdjustment>
<PayAdjustment>
<EmployeeId>262916</EmployeeId>
<StoreNumber>8294</StoreNumber>
<Department>5</Department>
<AdjustCode>91</AdjustCode>
<PayDate>2013-09-19</PayDate>
<Hours>8.0000</Hours>
<Amount>0</Amount>
</PayAdjustment>
</PayrollAdjustments>
提前致谢
尝试将XMLConcat
与XMLSequenceType
结合使用:
select
XMLRoot(
XMLElement(
"PayrollAdjustments",
XMLForest(
XMLForest(
'2013-09-15' as "From",
'2013-09-21' as "To"
) as "DateRange",
XMLConcat(XMLSequenceType(XMLAgg(XMLElement("PayAdjustment",
XMLForest(
EMPLOYEE as "EmployeeId",
STORE AS "StoreNumber",
DEPARTMENT AS "Department",
WORKCODE AS "AdjustCode",
PAYROLL_DATE AS "PayDate",
HOURS as "Hours",
0 as "Amount"
) AS "PayAdjustment"
)))
)
),
VERSION '1.0" encoding="utf-8',
STANDALONE YES
).getClobVal()
from timecard_payroll
where start_date = '2013-09-15'
and end_date = '2013-09-21'
and hours > 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.