在Oracle 10G中使用PLSQL展平数据

在Oracle 10G中使用PLSQL展平数据,plsql,oracle10g,Plsql,Oracle10g,有以下三个表格: Client (Client_Id) Order (Order_Id, Client_Id) OrderItem (OrderItem_Id, Order_Id) 如何获取客户机生成的ClientId列表以及所有OrderItem\u Id(序列化为字符串)的逗号分隔列表 注意客户端不能有多个订单 下面是一个例子: 投入: Client: 100 Order: 50, 100 OrderItem: [{1, 50}, {2, 50}, {3, 50}] 预期结果:100,“

有以下三个表格:

Client (Client_Id)
Order (Order_Id, Client_Id)
OrderItem (OrderItem_Id, Order_Id)
如何获取客户机生成的
ClientId
列表以及所有OrderItem\u Id(序列化为字符串)的逗号分隔列表

注意客户端不能有多个订单

下面是一个例子:

投入:

Client: 100
Order: 50, 100
OrderItem: [{1, 50}, {2, 50}, {3, 50}]
预期结果:
100,“1,2,3”

我正在使用Oracle10g(很快将移动到11G),没有
java
,没有游标,没有临时表。如果<11G或者可能的话


注意:WM_CONCAT是一个未记录的函数,使用风险自负;尽管非常有用。

它们是相互排斥的吗?我可以将WM_CONCAT与oracle 11G一起使用吗?WM_CONCAT在11G中工作;同样,在11g环境中,其未记录/未支持的so列表更可取;但是,我理解需要在10g环境下编码,并且易于移植到11g。只要知道,如果你使用wm_concat,它在某个点上会中断;oracle将告诉您使用list_Agg。然而,考虑到您当前的DB版本困境,使用XMLAgg可能更痛苦一些。
Select client_ID, List_Agg(OrderItem_ID, ', ')
from ORDER O
INNER JOIN ORDERITEM OI on OI.Order_ID = O.Order_ID
Select client_ID, wm_concat(OrderItem_ID)
from ORDER O
INNER JOIN ORDERITEM OI on OI.Order_ID = O.Order_ID