如何存储select语句的结果,以便我可以重用结果来连接到不同的表?这也将在游标内。
下面是一些伪代码,在这个例子中我保持了Select语句简单,但在现实生活中它是一个带有多个连接的长查询,我必须使用相同的SQL两次连接到2个不同的表,因为它是很长,可以在将来改变,因此我希望能够重复使用它。
我已经尝试创建一个视图并将select语句的结果存储在其中,但似乎我无法在游标循环中创建一个视图,当我尝试时我得到了#34;遇到符号& #34; 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 :(得分:3)
保存查询结果的一种方法是通过临时表格 - this question的简短答案描述了如何创建它们,而有更长的答案here讨论如何使用它们,可能的替代方案。
答案 1 :(得分: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