Oracle 计算分区中的行数

Bee*_*stu 1 oracle partitioning count

我有以下设置,其中包括分区。我可以使用一个查询来提供表中每个分区的计数吗?

我不喜欢通过收集统计数据而不是实际计数(*)来进行可能的估计。请注意,分区名称可以重命名!

下面是我的测试用例。感谢所有回答的人。


ALTER SESSION SET NLS_DATE_FORMAT = 'MMDDYYYY HH24:MI:SS';

CREATE TABLE dts (
   dt   DATE
)
PARTITION BY RANGE (dt)
INTERVAL (NUMTODSINTERVAL(7,'DAY'))
(
   PARTITION OLD_DATA values LESS THAN (TO_DATE('2022-01-01','YYYY-MM-DD'))
);


INSERT into dts(dt)
select to_date ( 
'01-08-2022','mm-dd-yyyy' ) + 
         ( level / 24 ) dt
from   dual
connect by level <= ( 24 + ( 24 * 
    (to_date('01-15-2022' ,'mm-dd-yyyy') -       to_date('01-08-2022','mm-dd-yyyy') )
  ) 
) ;

SELECT table_name,
       partition_name,
       num_rows
FROM   user_tab_partitions
WHERE table_name not like 'BIN$%'
ORDER BY table_name, partition_name;

TABLE_NAME    PARTITION_NAME    NUM_ROWS
DTS    OLD_DATA     - 
DTS    SYS_P415755     - 
DTS    SYS_P415756     - 

Run Code Online (Sandbox Code Playgroud)

Wer*_*eit 5

试试这个:

declare
   c integer;
begin
   for aPart in (select partition_name FROM user_tab_partitions where table_name = 'DTS') loop
      execute immediate 'select count(*) from DTS PARTITION ('||aPart.partition_name||')' INTO c;
      DBMS_OUTPUT.PUT_LINE(aPart.partition_name || ' ' || c || ' rows');
   end loop;
end;
Run Code Online (Sandbox Code Playgroud)