请教如何查询一个表中有哪些列全为空

blackkettle 2012-07-26 11:17:01
各位达人,

请教一个问题。

假设现在有一个表 table1, 共有 10列,全是 INT型。

create table table1
(col_1 INT,
col_2 INT,
col_3 INT,
col_4 INT,
col_5 INT,
col_6 INT,
col_7 INT,
col_8 INT,
col_9 INT,
col_10 INT)

这个表的记录的插入规则是

先插入若干记录, 这些记录在第 10列 col_10 有值,但是在其他列为空值;
再插入若干记录,这些记录在第 10列 col_10 和第 9列 col_9有值,但是在其他列为空值;
再插入若干记录,这些记录在第 10列 col_10,第 9列 col_9 和 第 8列 col_8有值,但是在其他列为空值;
...

请问我可以用一个什么样的 sql语句,来判断某一个时刻这个表中全为空的列的列名是哪些?

这里全为空的意思是:这个表中的所有记录在这一列的值都为空值

万分感谢!
...全文
1958 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackkettle 2012-07-26
  • 打赏
  • 举报
回复
补充一下,
这个表中全为空的列 是说 这个表中的所有记录在这一列的值都为空值
blackkettle 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

怕是要用PL/SQL哦
这样是否可以:
SQL code
DECLARE
CURSOR temp IS SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME=Upper('TEST');
v_num NUMBER;
BEGIN
FOR i IN temp
LOOP
execute immediate 'SELE……
[/Quote]

嗯,小德兄,非常不错!

多谢了!
小德 2012-07-26
  • 打赏
  • 举报
回复
怕是要用PL/SQL哦
这样是否可以:
DECLARE 
CURSOR temp IS SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME=Upper('TEST');
v_num NUMBER;
BEGIN
FOR i IN temp
LOOP
execute immediate 'SELECT Count(*) FROM test WHERE '||i.COLUMN_NAME||' IS NOT null' INTO v_num;
IF v_num=0 THEN
Dbms_Output.put_line('==columns that have no data=='||i.COLUMN_NAME);
END IF;
NULL;
END LOOP;
END;
blackkettle 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

这样可以?SQL code
CREATE TABLE test(a NUMBER(5),b NUMBER(5),c NUMBER(5));
INSERT INTO test VALUES (100,NULL,null);
INSERT INTO test VALUES (null,200,null);
INSERT INTO test VALUES (300,NULL,null);
COMMI……
[/Quote]

小德兄,这个可以实现哎。

我本来想要的是,

假设一开始连列名都不知道,只知道表名,要从 user_tab_columns里找对应的列名,

sql 该怎么写。

您再帮我写一个?
小德 2012-07-26
  • 打赏
  • 举报
回复
这样可以?
CREATE TABLE test(a NUMBER(5),b NUMBER(5),c NUMBER(5));
INSERT INTO test VALUES (100,NULL,null);
INSERT INTO test VALUES (null,200,null);
INSERT INTO test VALUES (300,NULL,null);
COMMIT;

SELECT column_name FROM
(
SELECT 'A'column_name,Max(Length(a))column_len FROM test UNION ALL
SELECT 'B'column_name,Max(Length(b))column_len FROM test UNION ALL
SELECT 'C'column_name,Max(Length(c))column_len FROM test
)WHERE column_len IS NULL;
blackkettle 2012-07-26
  • 打赏
  • 举报
回复

不是在所有列的值全为空的记录找出来
blackkettle 2012-07-26
  • 打赏
  • 举报
回复
楼上的几位兄弟,

我要的是

把 所有记录对应的某列全是空值 的 列名 找出来。
sumury 2012-07-26
  • 打赏
  • 举报
回复
很简单
where
col_1 IS NULL AND
col_2 IS NULL AND
col_3 IS NULL AND
col_4 IS NULL AND
col_5 IS NULL AND
col_6 IS NULL AND
col_7 IS NULL AND
col_8 IS NULL AND
col_9 IS NULL AND
col_10 IS NULL
陈字文 2012-07-26
  • 打赏
  • 举报
回复
IS NULL
小德 2012-07-26
  • 打赏
  • 举报
回复
是否可以用length(字段)=0判断

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧