0

我将如何存储 select 语句的结果,以便我可以重用结果来加入不同的表?这也将在游标内。

下面是一些伪代码,在这个例子中我保持 Select 语句简单,但在现实生活中它是一个带有多个连接的长查询,我必须使用相同的 SQL 两次来连接到 2 个不同的表,因为它很长而且将来可以更改,因此我希望能够重用它。

我尝试创建一个视图并将选择语句的结果存储在其中,但似乎我无法在游标循环内创建视图,当我尝试时出现“遇到符号“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; 
4

2 回答 2

3

保存查询结果的一种方法是通过临时表 -这个问题有一个简短的答案来描述如何创建它们,而这里有一个更长的答案讨论如何使用它们,以及可能的替代方案。

于 2013-05-31T09:00:45.953 回答
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
于 2013-05-31T14:30:05.897 回答