2013-01-08 2 views
0

곧 설명 할 것입니다. 열이 있습니다 DestinationId 및 열 HierarchyNodeId 현재 하나의 DestinationId에 대해 여러 개의 HierarchyNodeIds가 있습니다. 각 DestinationId 및 보관하려는 HierarchyNodeId를 제공하는 쿼리가 있습니다. 그래서 각 DestinationId와 연결된 다른 모든 HierarchyNodeId를 위의 쿼리에서 얻은 것과 바꾸기를 원합니다.PL/SQL에서 임시 쿼리 결과를 처리하는 방법

  1. 쿼리를 통해 루프를 만듭니다. 각 루프 사이클마다 특정 DestinationId (커서 "DestinationId"및 특정 커서 "HierarchyNodeId")가 있습니다.
  2. "HierarchyNodeId"열이 포함 된 3 개의 테이블이 있고 그 중 3 개를 모두 업데이트하려고합니다. 각 루프 사이클에서
  3. 나는 커서 모든 HierarchyNodeIds 동료를 발견하는 쿼리가 있습니다. "DestinationId"(현재주기 DestinationId)를

내 문제는 3 단계에서 쿼리가 2 아웃 3에서 데이터를 얻을 수있다 내가 업데이트하고 싶은 테이블. 그래서 난 내 첫 번째 업데이트를 수행 할 때 queryfromstep3의 결과가 변경됩니다 이후 그럼 내가 문제가있는 것입니다 내 업데이트 (예를

UPDATE table1 
SET table1."HierarchyNodeId"=cursor."HierarchyNodeId" 
WHERE table1."HierarchyNodeId" IN (queryfromstep3) 

)에서 사용하는 경우.

그래서 나는 각 루프의 시작 부분에 TEMP 테이블에 queryfromstep3의 결과를 저장하려고 생각하고있었습니다.

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 열을 생산에 저장할 쿼리입니다. 하지만 첫 번째 업데이트를 한 후에는 일부 Guids가 변경됩니다. 이를 방지하기 위해 각 루프의 시작 부분에 TEMP 테이블에 저장하려고합니다. 오라클 글로벌 임시 테이블에서

+0

당신이 우리에게 데이터 샘플 및 원하는 rsults을 줄 수 있습니까? –

+0

@ A.B.Cade 질의를 추가 하겠지만 더 많은 데이터를 증명함으로써 질문을 무겁게 만들 필요가 없습니다. Select 쿼리의 결과를 TEMP 테이블에 저장할 수 있는지 여부를 알고 싶었습니다. 그런 다음 해당 임시 테이블을 삭제하고 다시 시작하십시오 (루프가 재생 될 때마다) –

+0

@a_horse_with_no_name 정확하겠습니다! :) –

답변

관련 문제