Pular para o conteúdo

Fóruns Banco de dados Oracle Instrução Instrução

#92966
burga
Participante

    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…