在单个数据库调用中执行多个查询-SQL

在单个数据库调用中执行多个查询-SQL,sql,database,oracle,call,Sql,Database,Oracle,Call,我正在使用从Oracle数据库检索的数据创建pdf报告。对于每个报告,我都会打一个数据库电话。我想优化多个报告的调用,最多可以有500个报告。在当前场景中,我正在进行500 DB的调用,这将导致服务器超时。 我在寻找解决方案和答案。 1.我可以将数据列表作为输入传递给查询吗?查询需要2个输入。 2.整个数据检索集应该在1db调用中进行,而不是在500个单独的调用中进行。 3.响应应该是500个输入的累积结果。 请提出解决问题的方法或方向 这是一个基于Java的系统。DB调用来自Web应用程序。D

我正在使用从Oracle数据库检索的数据创建pdf报告。对于每个报告,我都会打一个数据库电话。我想优化多个报告的调用,最多可以有500个报告。在当前场景中,我正在进行500 DB的调用,这将导致服务器超时。 我在寻找解决方案和答案。 1.我可以将数据列表作为输入传递给查询吗?查询需要2个输入。 2.整个数据检索集应该在1db调用中进行,而不是在500个单独的调用中进行。 3.响应应该是500个输入的累积结果。 请提出解决问题的方法或方向

这是一个基于Java的系统。DB调用来自Web应用程序。DB:甲骨文


谢谢

有几种方法可以组合来自多个查询的结果

UNION ALL-允许您在查询1和UNION ALL查询2之间合并结果 做一个更一般的查询。-如果可以的话,这是最好的答案。 联接子查询并水平打印数据(如果可以联接它们)。选择a,b。从querya a在id上加入queryb b 可能还有其他的方法。例如存储过程等。
有几种方法可以组合来自多个查询的结果

UNION ALL-允许您在查询1和UNION ALL查询2之间合并结果 做一个更一般的查询。-如果可以的话,这是最好的答案。 联接子查询并水平打印数据(如果可以联接它们)。选择a,b。从querya a在id上加入queryb b 可能还有其他的方法。例如存储过程等。
如果您想在一次数据库调用中获取任意数量报告的数据,那么我认为您需要调用一个存储过程,该存储过程返回大量XML或JSON文本,然后您可以在应用程序中解析和显示这些文本。Oracle有内置的构造XML的函数,JSON很容易自己构造,尽管我相信第三方PL/SQL JSON包可能是可用的。

如果您想在一次数据库调用中获取任意数量报告的数据,然后我会设想您需要调用一个存储过程,该过程返回一个非常大的XML或JSON文本块,然后您可以在应用程序中解析和显示这些文本。Oracle有内置的构造XML的函数,JSON很容易自己构造,尽管我相信可能会有第三方PL/SQL JSON包。

感谢您的响应-报告数是动态的。感谢您的响应-报告数是动态的。不确定调用数是否是超时原因,但这些查询正在做什么。这些报告是动态的还是静态的?按某个时间表刷新的物化视图表示,如果满足刷新率的需要,一次/天可以解决您的问题。这将使您的查询减少到从matview where key='blah'选择*并解决超时问题。查询非常动态,它从大约12个表中获取数据,并且存储在表中的数据经常被修改。不确定调用次数是超时原因,但这些查询正在执行什么操作。这些报告是动态的还是静态的?按某个时间表刷新的物化视图表示,如果满足刷新率的需要,一次/天可以解决您的问题。这将减少您从matview中选择*的查询,其中key='blah',并解决超时问题。查询非常动态,它从大约12个表中获取数据,并且存储在表中的数据经常被修改。感谢您的解决方案。在这方面,我会给出一些指导,比如将数据列表作为输入发送到存储的进程,并在结果集中检索组合响应集。示例、示例或链接将非常有用。谢谢谢谢你的解决方案。在这方面,我会给出一些指导,比如将数据列表作为输入发送到存储的进程,并在结果集中检索组合响应集。示例、示例或链接将非常有用。谢谢