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

时间:2016-02-06 20:11:13

标签: sql oracle plsql sqlplus

我有一个SQL脚本,可以通过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;

由于

1 个答案:

答案 0 :(得分:4)

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

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