【问题标题】:Executing multiple queries in a single DB Call - SQL在单个数据库调用中执行多个查询 - SQL
【发布时间】:2011-06-23 08:46:00
【问题描述】:

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

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

谢谢!!

【问题讨论】:

  • 不确定“调用次数”是超时原因,但这些查询在做什么。这些报告是动态的还是静态的?如果满足您的刷新率需求,按某个时间表(例如每天一次)刷新的物化视图将解决您的问题。这将减少您从 matview where key='blah' 中选择 * 的查询并解决您的超时问题。
  • 查询是相当动态的,它从大约 12 个表中获取数据,并且表中存储的数据经常被修改。

标签: sql database oracle call


【解决方案1】:

如果您想在单个数据库调用中获取任意数量“报告”的数据,那么我想您需要调用一个存储过程,该过程返回一个非常大的 XML 或 JSON 文本块,您可以然后解析并显示在您的应用程序中。 Oracle 具有用于构建 XML 的内置函数,并且 JSON 很容易自己构建(尽管我相信可能会提供第 3 方 PL/SQL JSON 包)。

【讨论】:

  • 感谢您的解决方案。我会在这方面给出一些指导,比如将数据列表作为输入发送到存储过程,并在结果集中检索组合响应集。示例、示例或链接将有很大帮助。谢谢!!
【解决方案2】:

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

  1. UNION ALL -- 让您在 query1 UNION ALL query2 之间合并结果
  2. 进行 1 个更一般的查询。 -- 如果可以的话,这是最好的答案。
  3. 加入子查询并水平打印数据(如果您可以加入它们)。 select a., b. from (querya) a join (queryb) b on (id)
  4. 可能还有其他方法。比如存储过程等。

【讨论】:

  • 感谢您的回复 - 报告的数量是动态的。
猜你喜欢
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多