我不确定我是否可以在PL / SQL中执行此操作,或者我需要在多个输出游标的Web服务中构建我的XML树。但我在oracle中读了一些关于分层查询的内容,它似乎是一个更优雅的解决方案。我对SQL非常缺乏经验,所以我很难将分层查询的例子应用到我的案例中。
我在这个层次结构中有4个表。
我希望返回的数据集最终以XML格式简化为:
<DATA>
<SHIPMENTS>
<SHIPMENT>
<ORDERS>
<ORDER>
<CARTONS>
<CARTON>
<ITEMS>
<ITEM></ITEM>
<ITEM></ITEM>
<ITEM></ITEM>
</ITEMS>
</CARTON>
<CARTON>
<ITEMS>
<ITEM></ITEM>
<ITEM></ITEM>
</ITEMS>
</CARTON>
</CARTONS>
</ORDER>
<ORDER></ORDER>
</ORDERS>
</SHIPMENT>
</SHIPMENTS>
</DATA>
是什么让我的情况变得更加困难,是我选择的东西,实际上是从纸箱层面开始的。像这样的查询给了我所需的所有纸盒行,我需要前后退。
SELECT *
FROM
Q194977.AN_CARTON_INFO CI
WHERE
CI.PO_NO = 4887960
AND CI.STORE_NO = 1560
以下是我在Oracle Hierarchical查询中找到的文档,但它们的示例都使用相同的表。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm#i2060615
关于如何处理此问题的任何专家意见?
答案 0 :(得分:2)
Oracle hierachical或connect-by查询与您的需求不同。您可以使用单个查询生成所需的结构,但需要使用Oracle XML SQL函数。以下是Oracle文档的链接:
http://docs.oracle.com/cd/E11882_01/appdev.112/e16659/xdb13gen.htm#i1029583
以下是您最终可能会遇到的事情:
SELECT
XMLElement("CARTONS",
XMLAgg (
XMLElement("CARTON",
XMLForest(carton_id As "CARTON_ID", carton_name As "NAME"),
(
select XMLElement("ITEMS",
XMLAgg(
XMLElement("ITEM",
XMLForest(item_id As "ITEM_ID", description As "DESCRIPTION")
)
)
)
from ITEMS
where carton_id = c.carton_id
)
)
)
) As myxml
FROM CARTONS c
for producing:
<CARTONS>
<CARTON>
<ITEMS>
<ITEM></ITEM>
<ITEM></ITEM>
<ITEM></ITEM>
</ITEMS>
</CARTON>
<CARTON>
<ITEMS>
<ITEM></ITEM>
<ITEM></ITEM>
</ITEMS>
</CARTON>
</CARTONS>
以上查询从您的纸箱级别开始。添加货件和订单层时,它会变得更加复杂。您基本上在查询中构造结构,但它绝对可行。
我希望您从REST API生成JSON。然后你可以尝试我已经完成的PL / SQL框架。此框架提供了一个实用程序,可以从常规查询生成复杂的JSON结构。如果您或任何其他人很想知道,这里有一个指向我们网站的链接:
您可以在[用户指南] [1]
的第5.3节中找到一些有趣的示例