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

本文介绍了一种使用动态SQL来计算数据库表中所有字段均为null的记录数量的方法。通过构建动态SQL语句,此方法能够有效地处理具有大量字段的表,并避免了手动编写冗长的查询语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当表的字段个数很多的时候,取得所有字段都是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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值