问题描述
嗨,汤姆
在我的应用程序中使用SSRS工具和PLSQL。根据要求,我将类别作为in参数,例如 'AD','SA','SSV' 和 'SOA',因此我为所有类别编写了带有union all运算符的单个查询。现在的问题是我的查询已经变得非常大,这个查询的结果我传递为ref光标变量,这个ref光标变量的结果被ssrs数据集接受。
有什么办法,通过我可以将查询拆分为每个类别的多个ref游标变量,并将所有ref游标变量全部合并为单个refcursor变量,并将结果传递给ssrs报告。
我正在考虑做管道功能,但不确定它是否会起作用。
请帮助我解决此问题如何拆分大查询。
在我的应用程序中使用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
如果可维护性是您的问题,则可以使用两种技术来提供帮助。一种是使用与子句封装您的子查询:
或者你可以把查询放在 “适当的” 视图中。和工会-所有这些。
但是。
一般来说,你不想。
如果子查询是互斥的,并且您担心性能,请不要。数据库可以优化查询,因此它只运行与输入参数匹配的子查询:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




