1

これが非常に単純な要求であることを願っています...私は開発者でもDBAでもありませんが、Perl、PHP、およびPowerShellに手を出しました。とにかく、約400名の親子のテーブルがあります。表のスニペットは、この投稿の下部にあります。完全な深さが必要な場合は、412 の親/子の全リストを提供できます。

SOURCE_ID と DESTINATION_ID は、SOA 環境での Web サービスを表しています。この演習では、サービスの 1 つを選択し、階層内でその下にある「下流」の子を表示するだけです。また、階層のずっと上にある「上流」の親も知りたいです。

私はもともとテーブルをテキスト ファイルにカット アンド ペーストし、このPERL スクリプトを使用して階層ファイルを作成し、それを Excel に貼り付けました。簡単に言えば、SOURCE_ID のすべての子であると想定 した 25 の一意の ID を思いつきました。

これを SQL クエリで実行したいので、対話型/セルフサービスの Web ページを作成でき、手動のプロセスを心配する必要がありません。このサイトのどこかからこのコードを見つけて操作しました。

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 に答える