【问题标题】:Is it possible to use the Oracle sql WITH CLAUSE on multiple unrelated queries within the same file?是否可以在同一个文件中的多个不相关查询上使用 Oracle sql WITH CLAUSE?
【发布时间】:2016-02-06 20:11:12
【问题描述】:

我有一个通过 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;

谢谢

【问题讨论】:

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

标签: sql oracle plsql sqlplus


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2023-02-03
    • 2021-06-11
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多