我正在尝试构建查询或PL / SQL代码以执行查询并返回该查询的结果数量。
在单个查询中有可能吗?现在,我感觉自己非常浪费:我先将查询包装在COUNT中(不带ORDER BY),然后再次运行相同的查询(不带COUNT)。相差几秒钟可能不会改变总行数,我可以接受。 我正在使用的数据库是Oracle Enterprise 12.2
答案 0 :(得分:7)
一种简单的SQL方式: 测试表:
create table testTable(a, b, c) as (
select 1, 'one', 'XX' from dual UNION ALL
select 2, 'two', 'YY' from dual UNION ALL
select 3, 'three', 'ZZ' from dual
)
一个简单的查询:
select a, b, c
from testTable
A B C
---------- ----- --
1 one XX
2 two YY
3 three ZZ
3 rows selected.
具有记录数的查询:
select a, b, c, count(*) over (partition by 1) as count
from testTable
A B C COUNT
---------- ----- -- ----------
1 one XX 3
2 two YY 3
3 three ZZ 3
3 rows selected.
答案 1 :(得分:1)
您可以尝试执行以下操作:
WITH test_query
AS (SELECT LEVEL just_a_number
FROM dual
CONNECT BY level < 101)
SELECT just_a_number
, COUNT(just_a_number) OVER (ORDER BY 1) total_count
FROM test_query;
COUNT(just_a_number) OVER (ORDER BY 1)
将返回每行中提取的总行数。请注意,这可能会降低查询速度。
答案 2 :(得分:1)
通常,当我做这样的事情时,我创建一个存储过程,该过程返回2个值。第一个是将结果集设置为REF CURSOR,另一个将是返回计数的数字(12,0)。两者当然都需要单独的查询,但是由于它在单个存储过程中,因此它只是一个数据库连接和正在执行的命令。
您当然可以通过COUNT查询来放弃ORDER BY子句。
要回答您的问题,您本身并不是在浪费。这是企业软件中的常见做法。