在输出参数中包含多个计数来改进存储过程

use*_*180 0 sql oracle plsql stored-procedures

我有一个存储过程,该过程返回许多OUT参数,这些参数由SELECT COUNT(*)查询结果组成。下面的代码段运行正常,但似乎很慢。

我最多有30个不同的OUT参数,这意味着我要运行30个独立的查询,这可能就是为什么查询运行如此缓慢的原因。

有人对我如何加速此代码有任何建议吗?

PROCEDURE get_counts(
   count1 OUT INT,
   count2 OUT INT,
   count3 OUT INT,
   .. etc.
) IS 
   l_count1 INT;
   l_count2 INT;
   l_count3 INT;
   .. etc.
BEGIN
   SELECT COUNT(*) INTO l_count1 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count2 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count3 from table1 where condition_blah;
   ... etc

   count1 := l_count1;
   count2 := l_count2;
   count3 := l_count3;
   .. etc
END get_counts;
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 7

使用条件聚合:

SELECT SUM(CASE WHEN condition_blah THEN 1 ELSE 0 END),
       SUM(CASE WHEN condition_blah2 THEN 1 ELSE 0 END),
       . . .
INTO l_count1, l_count2, . . . ;
FROM table1
Run Code Online (Sandbox Code Playgroud)