Deixa eu ver se entendi… se a tabela tem 10 linhas e 5 colunas totalizando 50 informações, porém todas menos 1 coluna estão preenchidas, então você quer uma query que retorne que existem 40 campos preenchidos…
Seria isto?
Se sim, você pode fazer um script que monte o select que você necessita utilizando as tabelas do dicionario de dados.
DECLARE
STMT VARCHAR2(4000);
CONTADOR_REGS NUMBER(10);
CONTADOR_COLS NUMBER(5);
TABELA VARCHAR2(30);
BEGIN
TABELA := 'TABELA'; -- TABELA BUSCADA
STMT := 'SELECT 0 ' || CHR(10);
FOR I IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = TABELA AND NULLABLE = 'Y')
LOOP
STMT := STMT || ' + ' || ' (SELECT COUNT(*) FROM ' || TABELA || ' WHERE ' || I.COLUMN_NAME || ' IS NOT NULL )' || CHR(10);
END LOOP;
EXECUTE IMMEDIATE 'SELECT COUNT() FROM ' || TABELA INTO CONTADOR_REGS;
EXECUTE IMMEDIATE 'SELECT COUNT() FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ''' || TABELA || ''' AND NULLABLE = ''N''' INTO CONTADOR_COLS;
STMT := STMT || ' + (' || CONTADOR_REGS || ' * ' || CONTADOR_COLS || ') FROM DUAL;';
DBMS_OUTPUT.PUT_LINE(STMT);
END;
/
Eita… Espero que seja isso, rs… ainda dava pra fazer só com as informações do dicionário, tipo USER_TAB_COLUMNS.NUM_NULLS, coisa do tipo, numero_de_colunas – numero_de_linhas – SUM(USER_TAB_COLUMNS.NUM_NULLS) mas nem sempre o dicionário está mostrando os números reais se as estatisticas forem antigas…