【问题标题】:Returning Hierarchical data from web service, Oracle, PLSQL从 Web 服务、Oracle、PLSQL 返回分层数据
【发布时间】:2014-05-21 13:42:47
【问题描述】:

我不确定我是否可以在 PL/SQL 中执行此操作,或者我是否需要在我的 Web 服务中从多个输出游标构建我的 XML 树。但我读了一点关于 oracle 中分层查询的内容,这似乎是一个更优雅的解决方案。不过,我对 SQL 非常缺乏经验,因此很难将分层查询的示例应用于我的案例。

我在这个层次结构中有 4 个表。

  1. 发货 :: KEYS {INTERNAL_ASN, BILL_OF_LADING}
  2. 订单 :: KEYS {INTERNAL_ASN, BILL_OF_LADING, PO_NO}
  3. CARTONS :: KEYS {INTERNAL_ASN, BILL_OF_LADING, PO_NO, CARTON_NO}
  4. ITEMS :: KEYS {INTERNAL_ASN, BILL_OF_LADING, PO_NO, CARTON_NO, UPC_NO}

我希望返回的数据集最终以 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 分层查询中找到的文档,但它们的示例都使用同一张表。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm#i2060615

关于我应该如何处理这个问题的任何专家意见?

【问题讨论】:

    标签: xml web-services plsql hierarchy


    【解决方案1】:

    Oracle 分层查询或连接查询与您需要的不同。您可以使用单个查询来生成您需要的结构,但您需要使用 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 结构。如果您或任何其他人想知道,这里是我们网站的链接:

    http://backlogic.net

    您可能会在 [用户指南][1] 的第 5.3 节中找到一些有趣的示例

    【讨论】:

      猜你喜欢
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多