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

Posted

技术标签:

【中文标题】是否可以在同一个文件中的多个不相关查询上使用 Oracle sql WITH CLAUSE?【英文标题】:Is it possible to use the Oracle sql WITH CLAUSE on multiple unrelated queries within the same file? 【发布时间】: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;

谢谢

【问题讨论】:

你不能。为什么不创建一个视图? 是的,视图可以工作,但希望避免为每个报告创建视图。 【参考方案1】:

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

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

【讨论】:

以上是关于是否可以在同一个文件中的多个不相关查询上使用 Oracle sql WITH CLAUSE?的主要内容,如果未能解决你的问题,请参考以下文章

在 $or 中运行多个 geo $near 查询

匹配多个字段之一的表扫描 - OR vs 多个语句

如何在 Play Morphia 中动态组合 OR 查询中的多个条件

数据库中的条件查询

模型中1个函数中的多个MySQL查询

无法在正常查询中的特定字段上使用“OR”获得预期结果。 Solr可以对特定字段进行OR查询吗?