有一个分区表,我想用简单的sql语句得到出这个表中没有数据的分区的个数
这个sql语句应该怎么写啊?
现在想到的最笨的办法是在程序里写一个循环,然后一个分区一个分区去select count(*),返回0的计数器加一
各位大侠有什么好的建议啊,先在这里谢过了!

解决方案 »

  1.   

    dba_tab_partitions里有个num_rows字段,但这里只是上次分析过后的记录数,不一定准确。
    要想精确,还是count的好
      

  2.   

    试了一下,可以用select count(*) from dba_tab_partitions where table_name='表名' and num_ros = 0;可是这样的确不准确
      

  3.   

    count(*) 干吗呢?
    select * from tbl partitioins dba_tab_partitions where rownum=1;
    有记录就有数据。
      

  4.   

    我要在程序用到分区非空的个数,能不能sql直接返回这个个数?楼上的语句没看懂,而且会报错。
      

  5.   

    select *
    from tbl partition(part_02)
    where rownum=1;
    表示在分区标识part_02里面至少有一条数据。
    我上面写错了不好意思。
      

  6.   

    他的意思是一个一个分区查
    语句为:
    select * from table_name partition(partition_name)
    where rownum=1; 
      

  7.   

    我只会比较笨的:
    select count(*) from
    (select *
    from tbl partition(part_01)
    where rownum=1
    union
    select *
    from tbl partition(part_02)
    where rownum=1
    union
    ...
    );
      

  8.   

    大哥,我有好几百个分区,而且分区是随时间不断增加的,不能一个一个查啊,只能一条sql语句把所有的rownum=1的总分区数取出来。
      

  9.   

    好几百个?还随时间加啊?晕。
    那你程序里面怎么取到得分区名字?dba加了个分区,你程序岂不是又要修改?
      

  10.   

    知道,我得意思是,你在最上面说的程序里面利用for循环一个分区一个分区count,怎么弄得嘛。
      

  11.   

    那你建一表,把分区名字扔进去,然后用存储过程取分区名字动态执行sql来做,应该比较快。
    或者你的分区是怎么根据时间定的?利用时间那个数据是否存在任意一条来做