Pular para o conteúdo
  • Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 5 meses atrás por fabiommiranda.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #99788
    fabiommiranda
    Participante

      Prezados estou precisando de um script para procurar uma string em todos os campos do banco de dados.

      Exemplo : preciso procurar a string ‘BRASIL’ em todos os campos das tabelas de um owner .

      #99814
      leandrolbs
      Participante

        caraka… esta necessidade é bem doida…rsss

        Seguinte,

        monte um bloco plsql que pega o nome da coluna e tabela (all_tab_col) e monte um count ao qualquer coisa…. dai mostra a coluna e tabela e quantidade….

        cada coluna ele conta, se for maior que 1, ele mostra…

        E trate de não pegar colunas integer / float / number / decimal… pois estas não tem como ver o ‘BRASIL’

        Qualquer duvida posta ae

        #99845
        fabiommiranda
        Participante

          preciso procurar esse string dentro do campo … não o nome do campo …

          #99846
          burga
          Participante

            [quote=”fabiommiranda”:257y7dbg]preciso procurar esse string dentro do campo … não o nome do campo …[/quote]

            Oi Fábio, é exatamente isto que o Leandro está dizendo pra você fazer. Usando SQL’s dinâmicos, você monta as consultas de forma dinâmica e executa elas dentro de um bloco PL/SQL. Um exemplo basicão é:

            DECLARE
            stmt VARCHAR2(4000);
            cnt NUMBER(10);
            BEGIN
            FOR tab IN (SELECT * FROM DBA_TAB_COLUMNS
            WHERE OWNER IN ('OWNER1','OWNER2',...)
            AND DATA_TYPE IN ('VARCHAR2','CHAR','VARCHAR',...))
            LOOP
            stmt := 'SELECT COUNT(*) FROM' || tab.OWNER || '.' || tab.TABLE_NAME || ' WHERE ' || tab.COLUMN_NAME || ' LIKE ''%BRASIL%''';
            EXECUTE IMMEDIATE stmt INTO cnt;
            IF (cnt > 0) THEN
            DBMS_OUTPUT.PUT_LINE('tabela: ' || tab.TABLE_NAME || ', coluna: ' || tab.COLUMN_NAME);
            END IF;
            END LOOP;
            END;
            /

            Aí é só fazer os acertos de tipos de dados e owner no FOR SELECT. Mesmo que tiver algum erro, que eu tenha esquecido alguma coisa nesse código, pelo menos, o jeito de se resolver o que você quer é por esse caminho aí. É só um exemplo do que o Leandro já disse.

            Abraços,

            #99851
            fabiommiranda
            Participante

              Obrigado , pela ajuda estou executando o script aqui neste momento e estou tomando erro na linha provalvemente no like (ORA-00920) fiz uma alterações aqui e estou usando o operador = como teste.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.