如题,如何在一个字段很多的表中 较简单的确定出有哪些字段的值不是null,  谢谢 各位高手

解决方案 »

  1.   

    那些字段的值不是null是什么意思?
    这些字段的值全不为空?
      

  2.   

    楼主的意思是想通过一条简单的sql查询出表中所有字段不为空的记录。
      

  3.   

    --打印表中不存在空值的字段名
    CREATE OR REPLACE PROCEDURE printcol(i_tablename VARCHAR2) IS
      cur           SYS_REFCURSOR;
      v_column_name VARCHAR2(40);
      cnt           PLS_INTEGER;
    BEGIN
      OPEN cur FOR 'select t.COLUMN_NAME from user_tab_columns t where t.TABLE_NAME=upper(''' || i_tablename || ''')';
      LOOP
        FETCH cur
          INTO v_column_name;
        EXIT WHEN cur%NOTFOUND;
        cnt := 0;
        EXECUTE IMMEDIATE 'select count(1) from ' || i_tablename || ' where ' || v_column_name ||
                          ' is null '
          INTO cnt;
        IF cnt = 0 THEN
          dbms_output.put_line(v_column_name);
        END IF;
      END LOOP;
    END printcol;
      

  4.   

    --打印表中不存在空值的字段名
    CREATE OR REPLACE PROCEDURE printcol(i_tablename VARCHAR2) IS
      cur           SYS_REFCURSOR;
      v_column_name VARCHAR2(40);
      cnt           PLS_INTEGER;
    BEGIN
      OPEN cur FOR 'select t.COLUMN_NAME from user_tab_columns t where t.TABLE_NAME=upper('''
                   || i_tablename || ''')';
      LOOP
        FETCH cur
          INTO v_column_name;
        EXIT WHEN cur%NOTFOUND;
        cnt := 0;
        EXECUTE IMMEDIATE 'select count(1) from ' || i_tablename || ' where ' || v_column_name ||
                          ' is null '
          INTO cnt;
        IF cnt = 0 THEN
          dbms_output.put_line(v_column_name);
        END IF;
      END LOOP;
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
    END printcol;
    执行结果:
    SQL> set serveroutput on;
    SQL> exec printcol('test');
     
    ID
    TIME
     
    PL/SQL procedure successfully completed
     
    SQL>