2013-05-31 1 views
0

결과를 다른 테이블에 조인 할 수 있도록 select 문의 결과를 저장하는 방법은 무엇입니까? 이것은 또한 커서 안에 있습니다.결과를 다른 테이블에 조인 할 수 있도록 select 문의 결과를 어떻게 저장합니까?

다음은 일부 의사 코드입니다.이 예제에서는 Select 문을 간단하게 유지했지만 실제로는 여러 개의 조인이 포함 된 긴 쿼리이므로 동일한 SQL을 두 번 사용하여 두 테이블을 결합해야합니다. 꽤 길고 미래에 바뀔 수 있으므로 재사용 할 수 있기를 바랍니다.

나는 뷰를 생성하고 select 문에 결과를 저장하려고 시도했지만 커서 루프 내부에서 뷰를 만들 수없는 것처럼 보였습니다. "시도 중"심볼 "CREATE"오류가 발생했습니다. . 쿼리에서 결과를 저장하는

DECLARE TYPE cur_type IS REF CURSOR; 
CURSOR PT_Cursor IS 

    SELECT * FROM Table1 

    PT_Cursor_Row PT_Cursor%ROWTYPE; 

BEGIN 
OPEN PT_Cursor; 

LOOP 
    FETCH PT_Cursor INTO PT_Cursor_Row; 
    EXIT WHEN PT_Cursor%NOTFOUND; 

    Select ID From Table2 --this is actually a long complext query 
     INNER JOIN Table3 ON Table2.ID = Table3.ID 
    WHERE Table2.ID = PT_Cursor_Row.ID 

    Select * From Table2 --this is actually a long complext query 
     LEFT JOIN Table4 ON Table2.ID = Table4.ID 
    WHERE Table2.ID = PT_Cursor_Row.ID        

END LOOP; 

CLOSE PT_Cursor; 
END; 
+0

왜 커서를 사용 하시겠습니까? –

+0

테이블의 각 행에 대해 동일한 프로세스를 수행해야하기 때문에. – 03Usr

+0

이 프로세스는 데이터베이스 내에서 또는 외부에서 발생합니까? –

답변

3

한 가지 방법은 임시 테이블을 통해입니다 -를 사용하는 방법에 대해 설명 긴 대답 here이 동안을 만드는 방법에 대해 설명 this question에 짧은 대답과 함께, 거기에 가능한 대안.

2

임시 테이블은 확실히 실행 가능한 옵션입니다. with 문을 사용하여 결과 집합을 '다시 사용'할 수도 있습니다.

WITH 
PEOPLE AS 
(
    SELECT 'FRED' NAME, 12 SHOE_SIZE FROM DUAL UNION ALL 
    SELECT 'WILMA' NAME, 4 SHOE_SIZE FROM DUAL UNION ALL 
    SELECT 'BARNEY' NAME, 10 SHOE_SIZE FROM DUAL UNION ALL 
    SELECT 'BETTY' NAME, 3 SHOE_SIZE FROM DUAL 
), 
WOMAN AS 
(
    SELECT 'BETTY' NAME FROM DUAL UNION ALL 
    SELECT 'WILMA' NAME FROM DUAL 
) 
SELECT 'WOMANS ', PEOPLE.NAME, PEOPLE.SHOE_SIZE 
FROM PEOPLE, WOMAN 
WHERE PEOPLE.NAME = WOMAN.NAME 

UNION ALL 

SELECT 'MENS ', PEOPLE.NAME, PEOPLE.SHOE_SIZE 
FROM PEOPLE, WOMAN 
WHERE PEOPLE.NAME = WOMAN.NAME(+) 
    AND WOMAN.NAME IS NULL 
관련 문제