一千萬個為什麽

搜索

如何查找具有非空值的列?

我在oracle數據庫中有很多列,一些新的值添加了值。我想找出哪些列的值不是0或null。所以我正在尋找至少在一行中存在某些有用值的列名。

我該怎麽做呢?

更新:聽起來非常接近。如何修改它以滿足我的需求?

select column_name, nullable, num_distinct, num_nulls
from all_tab_columns
where table_name = 'SOME_TABLE'

最佳答案

您可以使用dba_tab_cols視圖查詢所有列,然後查看是否存在值為0或null的列。

create or replace function f_has_null_rows(
    i_table_name in dba_tab_cols.table_name%type,
    i_column_name in dba_tab_cols.table_name%type
) return number is
v_sql varchar2(200);
v_count number;
begin
  v_sql := 'select count(*) from ' || i_table_name ||
           ' where ' || i_column_name ' || ' is not null and ' 
           || i_column_name  || ' <>0 ';

  execute immediate v_sql into v_count;

  return v_count;
end;
/


select table_name, column_name from dba_tab_Cols
where  f_has_null_rows (table_name, column_name) > 0 
  1. 如果您在某些模式中有同義詞,那麽您可能會發現某些表格會重復出現。您必須更改代碼才能滿足此要求。

  2. 此外,檢查“不等於零”可能對非整數的列無效,並且如果列是date數據類型則會給出錯誤。您需要為這些案例添加條件。使用dba_tab_cols中的Data_type列並根據需要添加條件。

轉載註明原文: 如何查找具有非空值的列?