是否可以在同一文件中的多个不相关查询上使用Oracle sql WITH子句?

是否可以在同一文件中的多个不相关查询上使用Oracle sql WITH子句?,sql,oracle,plsql,sqlplus,Sql,Oracle,Plsql,Sqlplus,我有一个通过SQL plus生成报告的SQL脚本。报告是通过依次运行多个不相关的查询生成的。 有些查询有我想尝试的通用代码,并且只定义一次。例如,假设报告生成文件包含以下两个脚本 Select a, b, c from x where a in ( select x From d where x like '%ABC%' ) / Select a, d, y from z where a in ( select x From d where x like '%A

我有一个通过SQL plus生成报告的SQL脚本。报告是通过依次运行多个不相关的查询生成的。 有些查询有我想尝试的通用代码,并且只定义一次。例如,假设报告生成文件包含以下两个脚本

Select a, b, c
from x
where a in (
    select x
    From d where x like '%ABC%'
)
/

Select a, d, y
from z
where a in (
    select x
    From d where x like '%ABC%'
)
/
这两个查询完全不同,但都使用相同的子查询。 我希望避免为每个独立查询重写子查询

可以使用WITH子句,但我不确定如何在两个不同的查询中使用它

with t1 as (
 select x
 from d where x like '%ABC%'
)
Select a, b, c
from x, t1
where t1.x = x.a
上面为第一个查询解析了它。如何在第二个查询中使用相同的WITH语句?或者是否有其他方法来实现这一点

编辑

另一个选项是使用refcursors。这可能可行,但为每个查询构建字符串并将其与通用字符串查询连接起来可能非常繁琐。因为它是一个plsql块,所以在不同的查询之间生成头也是很困难的

Declare
    v_sql varchar(2000);
Begin
    v_sql := 'Select 1 from dual';
    dbms_output.put_line(v_sql);
    Open :x for v_sql;
End;
/
print x;

谢谢

您不能对多个查询使用公共表表达式(CTE)。这是用于单个查询的功能


我建议使用视图或临时表。

您不能对多个查询使用公共表表达式(CTE)。这是用于单个查询的功能


我推荐一个视图或临时表。

你不能。为什么不创建一个视图?是的,视图可以工作,但希望避免为每个报表创建一个视图。您不能。为什么不创建一个视图呢?是的,视图可以工作,但希望避免为每个报表创建一个视图。