2013-05-31 54 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 
相关问题