暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何拆分大联合所有查询

askTom 2018-11-06
272

问题描述

嗨,汤姆

在我的应用程序中使用SSRS工具和PLSQL。根据要求,我将类别作为in参数,例如 'AD','SA','SSV' 和 'SOA',因此我为所有类别编写了带有union all运算符的单个查询。现在的问题是我的查询已经变得非常大,这个查询的结果我传递为ref光标变量,这个ref光标变量的结果被ssrs数据集接受。
有什么办法,通过我可以将查询拆分为每个类别的多个ref游标变量,并将所有ref游标变量全部合并为单个refcursor变量,并将结果传递给ssrs报告。

我正在考虑做管道功能,但不确定它是否会起作用。
请帮助我解决此问题如何拆分大查询。

专家解答

用联合对所有的SQL进行拆分通常是将每个子查询提取到自己的语句中。您需要为我们分享您的查询,以提供更有意义的帮助。

但是。

一般来说,你不想。

如果子查询是互斥的,并且您担心性能,请不要。数据库可以优化查询,因此它只运行与输入参数匹配的子查询:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9538822000346932676

如果可维护性是您的问题,则可以使用两种技术来提供帮助。一种是使用与子句封装您的子查询:

with complex1 as (
  select big_query1 ...
), complex2 as (
  select big_query2 ...
), ...
  select * 
  from   complex1
  union all
  select * 
  from   complex2
  ...


或者你可以把查询放在 “适当的” 视图中。和工会-所有这些。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论