`

Oracle中,取得表中所有字段都为null的个数

 
阅读更多
当表的字段个数很多的时候,取得所有字段都是null的个数
字段很少的时候,可以这么写:
select count(*) from tb where a is null and b is null ...

字段很多的时候就不是很方便了,下面用动态sql实现。
DECLARE
    TYPE myref IS REF CURSOR;
    cur     myref;
    sqlStr  VARCHAR2(200);
    tb_name VARCHAR2(20);
    TYPE arrays IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
    column_array arrays;
    null_num     INTEGER;
BEGIN
    tb_name := 'TB';
    sqlStr  := 'SELECT column_name FROM user_tab_columns WHERE table_name = ''' ||
               tb_name || '''';
    OPEN cur FOR sqlStr;
    FETCH cur BULK COLLECT
        INTO column_array;
    CLOSE cur;

    sqlStr := 'SELECT COUNT(*) FROM ' || tb_name || ' WHERE 1=1';
    FOR i IN column_array.FIRST .. column_array.LAST LOOP
        sqlStr := sqlStr || ' AND ' || column_array(i) || ' IS NULL ';
    END LOOP;

    EXECUTE IMMEDIATE sqlStr
        INTO null_num;
    dbms_output.put_line(null_num);
END;
分享到:
评论

相关推荐

    SqlServer和Oracle的不同的一些体会

    - **Sql Server**:`Timestamp`类型是以二进制格式存储的,可以将`DataSet`中的该字段类型设置为`base64Binary`。 - **Oracle**:`Timestamp`类型是以时间格式存储的。这意味着无法使用相同的`DataSet`同时装载Sql ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     删除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services中所有以oracle或OraWeb为开头的键。  删除HKEY_LOCAL_MACHINE/SYSETM/CurrentControlSet/Services/Eventlog/application中所有以oracle开头的键。 ...

    INFORMIX_ORALCE_SQLDA

    如果该列允许为NULL,则:该字段若为0,表示数据值不为NULL,若为-1,表示数据值为NULL。 - **sqlname**:代表列名或变量名。 - **sqlformat**:保留为以后使用。 - **sqlitype**:指定用户定义的指示符变量的数据...

    关系数据库标准语言.pdf

    21. 插入到student表中,所有必填字段都不能为NULL,所以选项B正确,其他选项缺少必要字段或包含非法类型(如'男'而不是'F'或'M')。 22-24. 由于没有提供具体的SQL语句,这部分无法给出详细的答案,但通常检索学生...

    树形查询带记录数量

    在数据库中,这种结构通常通过自关联的表来实现,即一张表中的某个字段引用了该表自身的主键。 在进行树形查询时,我们通常会用到递归SQL查询或者利用数据库提供的特定功能,如Oracle的CONNECT BY,MySQL的WITH ...

    C#编程经验技巧宝典

    76 <br>0111 计算字符串中子字符串出现的次数 76 <br>0112 获得字符串中大写字母的个数 77 <br>0113 获得某字符在字符串中最后出现的位置 78 <br>0114 如何找出字符串中某一字符的所有位置 78...

Global site tag (gtag.js) - Google Analytics