NUM_NULLS和NUM_ROWS不适用于Oracle

时间:2014-07-02 16:02:20

标签: sql oracle

我试图找到总行数,以及数据库中每列的空行数。我觉得以下内容应该有效,但每次运行时,num_nullsnum_rows都会空白(所以我放入COALESCE所以它现在导致0)

  

SELECT atc.column_name,atc.table_name,atc.data_type,COALESCE(atc.num_nulls,0),COALESCE(at.num_rows,0)   从       all_tab_columns atc JO ON all_tables at ON ATC.TABLE_NAME = at.table_name;

我的代码是否有问题,或者all_tab_columnsall_tables是否有可能不是最新的?

PS。表中确实有信息,我已经检查过数据库是否为空。

1 个答案:

答案 0 :(得分:1)

你可以循环遍历all_tab_columns表,为你生成一个看起来像这样的脚本:

with data as (
    select
        count(*) tot_rows,
        count(owner) owner,
        count(object_name) object_name,
        count(subobject_name) subobject_name
    from tblname
)
select column_name, not_null_count, tot_rows - not_null_count null_count
from data
unpivot (
    not_null_count
    for column_name in (owner,object_name,subobject_name)
);

哪会给你结果:

COLUMN_NAME    NOT_NULL_COUNT NULL_COUNT
-------------- -------------- ----------
OWNER                     801          0
OBJECT_NAME               801          0
SUBOBJECT_NAME              0        801