2013-05-31 81 views
0

我將如何存儲select語句的結果,以便我可以將結果重用到不同的表中?這也將在光標內。我將如何存儲select語句的結果,以便可以將結果重用到不同的表中?

下面是一些僞代碼,在這個例子中,我保持Select語句簡單,但在現實生活中,它是一個長連接多個連接的查詢,我必須使用相同的SQL連接兩個不同的表,很長,可以在將來改變,因此我希望能夠重用它。

我試圖創建一個視圖,並在其中存儲選擇語句的結果,但它似乎我不能創建一個視圖內遊標循環,當我嘗試我遇到「遇到符號」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

一種方式是通過一個臨時表 - 有一個簡短的回答this question介紹如何創建它們,同時有一個較長的答案here,討論如何使用它們,用可能的選擇。

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 
相關問題