我在oracle數據庫中有很多列,一些新的值添加了值。我想找出哪些列的值不是0或null。所以我正在尋找至少在一行中存在某些有用值的列名。
我該怎麽做呢?
更新:聽起來非常接近。如何修改它以滿足我的需求?
select column_name, nullable, num_distinct, num_nulls
from all_tab_columns
where table_name = 'SOME_TABLE'
我在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
如果您在某些模式中有同義詞,那麽您可能會發現某些表格會重復出現。您必須更改代碼才能滿足此要求。
此外,檢查“不等於零”可能對非整數的列無效,並且如果列是date數據類型則會給出錯誤。您需要為這些案例添加條件。使用dba_tab_cols中的Data_type列並根據需要添加條件。