当前位置: 代码迷 >> Oracle管理 >> 请问怎么查询一个表中有哪些列全为空
  详细解决方案

请问怎么查询一个表中有哪些列全为空

热度:7   发布时间:2016-04-24 05:11:24.0
请教如何查询一个表中有哪些列全为空
各位达人,

请教一个问题。

假设现在有一个表 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语句,来判断某一个时刻这个表中全为空的列的列名是哪些?

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

万分感谢!

------解决方案--------------------
这样可以?
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);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;
------解决方案--------------------
怕是要用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 '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;
  相关解决方案