0

簡単に説明します。列DestinationId と列がありますHierarchyNodeId 現在、1 つの DestinationId に対して複数の HierarchyNodeIds があります。保持したい各 DestinationId と HierarchyNodeId を提供するクエリがあります。したがって、各 DestinationId に関連付けられている他のすべての HierarchyNodeId を、上記のクエリから取得したものに置き換えたいと考えています。

  1. クエリを介してループを作成します。したがって、各ループ サイクルには、特定の DestinationId (cursor."DestinationId" と特定の cursor."HierarchyNodeId") があります。
  2. 列「HierarchyNodeId」を含む 3 つのテーブルがあり、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 テーブルに格納したいと考えています。

4

1 に答える 1

0

Oracle グローバル一時テーブルを見てください: http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables003.htm#ADMIN11633

于 2013-01-08T13:30:05.080 に答える