需要用到循环及动态sql。
目前创新互联公司已为上千的企业提供了网站建设、域名、网页空间、网站托管、企业网站设计、察隅网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
如test表中有如下数据,其中id和name列有空值。
执行以下内容:
declare
v_count int;--定义变量
v_col varchar2(20);--定义变量
v_sql varchar2(2000);--定义变量
v_last_col varchar2(20);--定义变量
cursor cur_col is select column_name from user_tab_cols where table_name='TEST' order by column_id;--定义游标
begin
select column_name into v_last_col from user_tab_cols where table_name='TEST' and column_id=(select max(column_id) from user_tab_cols where table_name='TEST');--取出表中最后一个字段放入v_last_col
open cur_col;--打开游标
loop --执行循环
fetch cur_col into v_col;--取出游标内容到变量v_col
v_sql:='select count(*) from TEST where '||v_col||' is null';
execute immediate v_sql into v_count;--执行动态sql
if v_count0--如果查询有空值的字段不为空,则输出此字段名
then
dbms_output.put_line(v_col);
end if;
exit when v_col=v_last_col; --退出循环条件
end loop;--结束循环
close cur_col;--关闭游标
end;
执行结果:
空值null比较特殊,它不能通过=或者进行查询,只能用is null或者is not null进行查询,例如你的数据中有null值,那么用 字段名=1,字段名1,字段名=null都不能把这条数据检索出来,只有字段名 is null能检索出来。 所以你需要查询的数据有两种
1、创建一张数据库测试表,用于演示null空值的查询。
2、往测试表中插入测试记录,包含一个NULL、空字符串、非空字符串值。
3、查询测试表中的所有数据,select * from tblNullData。
4、在oracle数据库中,null与任何字段相比都会返回false,为此,oracle提供了一个is null词组判断null。从运行结果可以看出,空字符串不是null select * from tblNullData where ColName is null。
5、在oracle数据库中,想要查询非null的值,就需要使用is not null词组判断了。从运行结果可以看出,空字符串的记录行查询出来了select * from tblNullData where ColName is not null。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款