Sql 如何存储select语句的结果,以便可以重用结果来连接到不同的表?

Sql 如何存储select语句的结果,以便可以重用结果来连接到不同的表?,sql,oracle10g,Sql,Oracle10g,如何存储select语句的结果,以便可以重用结果来连接到不同的表?这也将位于光标内 下面是一些伪代码,在这个示例中,我保持了Select语句的简单性,但在现实生活中,它是一个具有多个联接的长查询,我必须使用相同的SQL两次来联接到两个不同的表,因为它非常长,将来可以更改,因此我希望能够重用它 我曾尝试创建一个视图并将select语句的结果存储在其中,但似乎无法在游标循环中创建视图,当我尝试创建视图时,遇到了“遇到”符号“create”错误 保存查询结果的一种方法是通过临时表-有一个简短的答案描述

如何存储select语句的结果,以便可以重用结果来连接到不同的表?这也将位于光标内

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

我曾尝试创建一个视图并将select语句的结果存储在其中,但似乎无法在游标循环中创建视图,当我尝试创建视图时,遇到了“遇到”符号“create”错误


保存查询结果的一种方法是通过临时表-有一个简短的答案描述如何创建查询结果,而有一个较长的答案讨论如何使用查询结果,有可能的替代方法。

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

临时表当然是一个可行的选择。 还可以使用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

临时表当然是一个可行的选择。 还可以使用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

为什么要/打算使用游标?因为我们需要对表的每一行执行相同的过程。这个过程是发生在数据库内部还是外部?所以为什么不在select中执行此处理,而不是在游标中循环?这里所有的SQL都是伪的,实际的查询是复杂的查询,有100行,处理的行数超过100万行,我们尝试过使用select,但最终决定使用cursor。为什么要/打算使用cursor?因为我们需要对表的每一行执行相同的过程。这个过程是数据库中发生的吗,或者在它之外?那么为什么不在select中执行此处理,而不是在游标中循环呢?这里所有的SQL都是伪SQL,实际的SQL都是复杂的查询,有100行,处理超过100万行,我们尝试过使用select,但最终决定使用游标。