查询循环中表的每一列 - Oracle数据库

时间:2012-07-25 03:00:13

标签: sql oracle loops

我正在使用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),我也可以显示列名称(但这不是很重要)。

谢谢!

2 个答案:

答案 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 SQLHow to loop through columns in an oracle pl/sql cursor

HTH。