簡単に説明します。列DestinationId
と列がありますHierarchyNodeId
現在、1 つの DestinationId に対して複数の HierarchyNodeIds があります。保持したい各 DestinationId と HierarchyNodeId を提供するクエリがあります。したがって、各 DestinationId に関連付けられている他のすべての HierarchyNodeId を、上記のクエリから取得したものに置き換えたいと考えています。
- クエリを介してループを作成します。したがって、各ループ サイクルには、特定の DestinationId (cursor."DestinationId" と特定の cursor."HierarchyNodeId") があります。
- 列「HierarchyNodeId」を含む 3 つのテーブルがあり、3 つすべてを更新したいと考えています。
- 各ループ サイクルで、cursor."DestinationId" (現在のサイクルの DestinationId) に関連付けられているすべての HierarchyNodeIds を検索するクエリがあります。
私の問題は、ステップ 3 のクエリが、更新したい 3 つのテーブルのうち 2 つからデータを取得することです。したがって、更新で使用すると(例
UPDATE table1
SET table1."HierarchyNodeId"=cursor."HierarchyNodeId"
WHERE table1."HierarchyNodeId" IN (queryfromstep3)
) 次に、最初の UPDATE を実行したときに queryfromstep3 の結果が変更されるため、問題が発生します。
そこで、各ループの開始時に queryfromstep3 の結果を TEMP テーブルに格納することを考えていました。
これはPL/SQLで可能ですか? どうもありがとう!
編集:
TEMPに保存したいクエリは次のとおりです
SELECT "HierarchyNodeId" FROM
(
Select t1."Counter", t2.* From
(SELECT "HierarchyNodeId", (SELECT "Description"
FROM "Destination"
WHERE "DestinationId" = hn."DestinationId") "Description", "DestinationId",
(SELECT "DestinationTypeId"
FROM "Destination"
WHERE "DestinationId" = hn."DestinationId") "DestinationTypeId"
FROM "HierarchyNode" hn
WHERE "DestinationId" IN (SELECT "DestinationId" From(SELECT COUNT ("HierarchyNodeId"), "DestinationId" FROM "HierarchyNode" GROUP BY "DestinationId" HAVING COUNT ("HierarchyNodeId") > 1))) t2,
(select COUNT (*) "Counter", "HierarchyNodeId" From "HierarchyDetail"
Group By "HierarchyNodeId") t1
Where t1."HierarchyNodeId" = t2."HierarchyNodeId"
AND t2."DestinationId" = cur."DestinationId"
AND t2."HierarchyNodeId" != cur."HierarchyNodeId"
ORDER BY "DestinationId", "Counter" Desc
)
基本的に、Guid を使用して 1 つの列を生成します。しかし、これらの Guid の一部は、最初の UPDATE を実行した後に変更されます。それを避けるために、各ループの開始時に TEMP テーブルに格納したいと考えています。