请教如何查询一个表中有哪些列全为空
各位达人,
请教一个问题。
假设现在有一个表 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语句,来判断某一个时刻这个表中全为空的列的列名是哪些?
这里全为空的意思是:这个表中的所有记录在这一列的值都为空值
万分感谢!
[解决办法]
这样可以?
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哦
这样是否可以:
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;