1

我希望这是一个非常简单的请求……我不是开发人员或 DBA,但我涉足过 Perl、PHP 和 PowerShell。无论如何,我们有一个大约 400 位父母和孩子的桌子。表格的片段在这篇文章的底部。如果需要完整的深度,我可以提供 412 个父/子的完整列表。

SOURCE_ID 和 DESTINATION_ID 代表 SOA 环境中的 Web 服务。对于这个练习,我们只需要选择一个服务,然后在层次结构中显示它下面的“下游”子代。此外,我们也想知道层次结构中的“上游”父母。

我最初只是将表格剪切并粘贴到一个文本文件中,然后使用这个PERL 脚本生成一个层次结构文件,然后将其粘贴到 excel 中。长话短说,我想出了 25 个唯一 ID,我认为它们都是 SOURCE_ID 的孩子。

我想用 SQL 查询来做到这一点,这样我就可以制作一个交互式/自助式网页,而不必担心手动过程。我从这个网站的某个地方找到并操作了这段代码:

select Source_Service_Id parent, Destination_Service_Id child
from dd_service_relationship
connect by prior id = Source_Service_Id
start with Source_Service_Id = 10512

它只返回 12 个结果。现在我不知道该相信哪个结果。

请验证 SQL 代码是否应返回所有子项(如果子项在多个父项下,则不重复),并且它将遍历整个表。

这是 dd_service_relationship 表的一小部分:

ID            UPDATE_DATE                  SOURCE_ID        DESTINATION_ID
10502    9/24/2012 2:09:45 PM    10501                    10500
10504    9/24/2012 2:09:45 PM    10501                    10503
10506    9/24/2012 2:09:45 PM    10501                    10505
10509    9/24/2012 2:09:45 PM    10508                    10507
10511    9/24/2012 2:09:45 PM    10508                    10510
10513    9/24/2012 2:09:45 PM    10508                    10512
10515    9/24/2012 2:09:45 PM    10508                    10514
10517    9/24/2012 2:09:45 PM    10508                    10516
10519    9/24/2012 2:09:45 PM    10508                    10518
10521    9/24/2012 2:09:45 PM    10508                    10520
10523    9/24/2012 2:09:45 PM    10508                    10522
10526    9/24/2012 2:09:45 PM    10525                    10524
10527    9/24/2012 2:09:45 PM    10525                    10505
10529    9/24/2012 2:09:45 PM    10525                    10528
10531    9/24/2012 2:09:45 PM    10525                    10530
10533    9/24/2012 2:09:45 PM    10532                    10505
10534    9/24/2012 2:09:45 PM    10532                    10507
10535    9/24/2012 2:09:45 PM    10532                    10510
10536    9/24/2012 2:09:45 PM    10532                    10512
10538    9/24/2012 2:09:45 PM    10532                    10537
10541    9/24/2012 2:09:45 PM    10540                    10539
10543    9/24/2012 2:09:45 PM    10542                    10514
10544    9/24/2012 2:09:45 PM    10542                    10539
10545    9/24/2012 2:09:45 PM    10542                    10505
10547    9/24/2012 2:09:45 PM    10546                    10518
10549    9/24/2012 2:09:45 PM    10546                    10548

谢谢...

4

1 回答 1

0

这是我最终拼凑的代码。由于我不是开发人员,因此我无法保证它的效率或适当的结构。它完成了我寻求帮助的工作,而且它按今天的日期过滤,还从另一个表中提取服务的名称。希望这可以帮助其他人寻找类似的解决方案:

select SERVICE_NAME from DD_SERVICES where ID in (
select distinct DESTINATION_SERVICE_ID from(
    select
    ID,
    SOURCE_SERVICE_ID, 
    DESTINATION_SERVICE_ID, 
    level
    from DD_USER.DD_SERVICE_RELATIONSHIP where trunc(UPDATE_DATE) = trunc(SYSDATE)
    start with SOURCE_SERVICE_ID = {insert root value here}
    connect by prior DESTINATION_SERVICE_ID = SOURCE_SERVICE_ID
    )
)
于 2012-10-03T12:36:30.273 回答