我正在使用oracle数据库,我基本上需要做的是计算某个表中每列的NULL字段数。
类似的东西:
DECLARE
BlankCount number(20);
i number(2) := 1;
BEGIN
loop that would take each column individualy and exit after the last one
SELECT COUNT(*) INTO BlankCount FROM name_of_my_table
DBMS_OUTPUT.PUT_LINE('Column '||i||' has '||BlankCount||' empty cells');
i := i + 1;
END LOOP;
END;
我找不到任何可以做循环部分的东西。 如果不是仅仅对它们进行编号(使用i),我也可以显示列名称(但这不是很重要)。
谢谢!
答案 0 :(得分:5)
这样的事情:
declare
mytable varchar(32) := 'MY_TABLE';
cursor s1 (mytable varchar2) is
select column_name
from user_tab_columns
where table_name = mytable
and nullable = 'Y';
mycolumn varchar2(32);
query_str varchar2(100);
mycount number;
begin
open s1 (mytable);
loop
fetch s1 into mycolumn;
exit when s1%NOTFOUND;
query_str := 'select count(*) from ' || mytable || ' where ' || mycolumn || ' is null';
execute immediate query_str into mycount;
dbms_output.put_line('Column ' || mycolumn || ' has ' || mycount || ' null values');
end loop;
end;
答案 1 :(得分:0)
尝试使用此线程中提到的游标方法和Dynamic SQL:How to loop through columns in an oracle pl/sql cursor
HTH。