Pular para o conteúdo
  • Este tópico contém 7 respostas, 5 vozes e foi atualizado pela última vez 12 anos, 1 mês atrás por Avatar de Vivaldo NetoVivaldo Neto.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #104463
    Avatar de Vivaldo NetoVivaldo Neto
    Participante

      Boa Noite galera,

      Estou aqui em um cliente fazendo manutenção no banco e me deparei com a seguinte situação…
      como fazer um select para selecionar as tabelas vazias e depois deleta-las

      Alguem tem uma ideia???

      Valeu

      #104467
      Avatar de rmanrman
      Participante

        @vivaldo

        Segue a ideia:


        DECLARE
        L_ROWS INTEGER;
        L_TABLE_NAME ALL_TABLES.TABLE_NAME%TYPE := NULL;
        BEGIN
        FOR TABLE_RECORD IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER =
        'DIGITE_AQUI_O_OWNER' ORDER BY TABLE_NAME) LOOP
        EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || TABLE_RECORD.TABLE_NAME INTO
        L_ROWS;
        DBMS_OUTPUT.PUT_LINE(TABLE_RECORD.TABLE_NAME||', '||L_ROWS);
        END LOOP;
        END;

        #104489
        Avatar de Vivaldo NetoVivaldo Neto
        Participante

          @rman

          Executei sua ideia mas me retornou somente “anonymous block completed”
          será que executou mas não existe tabela vazia??

          #104491
          Avatar de rmanrman
          Participante

            @vivaldo

            Utilize o sqlplus e execute antes:


            set serveroutput on

            #104493
            Avatar de Claudeir Jose da Costa juniorClaudeir Jose da Costa junior
            Participante

              Olá amigo, eu gosto de fazer as coisas do modo mais prático possível, sendo assim uma maneiro que eu fiz aqui em casa e deu certo, foi usando o SqlDeveloper para tratar o campo vazio, ou seja, eu 1º procurei qual tabela estaria com o campo vazio, depois fiz uma exportação dela em formato .SQL abri no próprio sqlDeveloper (Foi o único que entendeu que ‘ ‘ é um campo vazio entre aspas simples), mandei ele substituir ‘ ‘ por qualquer outra coisa tipo: ‘Vazio’ ou ‘VVV’ isso fica a sua escolha, ele substituiu e depois dropei a tabela e inseri os novos dados, possa ser que se a sua tabela for muito grande o Developer não tenha buffer para abrir o Sql. tenta e depois manda pra nós o resultado.

              Um abraço a todos.

              #104495
              Avatar de paulogervapaulogerva
              Participante

                Você pode coletar essa informação usando a coluna NUM_ROWS da view DBA_TABLES.

                select 'DROP TABLE ' || table_name || ';' from DBA_TABLES where owner='SCHEMA_OWNER' and num_rows=0;

                Porém antes é necessário atualizar os dados da view DBA_TABLES usando a função:

                begin
                dbms_stats.gather_schema_stats(ownname => 'SCHEMA_OWNER');
                end;

                Cuidado com a cláusula WHERE, pois se executar a query sem ela irá gerar um script que excluirá também tabelas do sistema.
                Também te aconselho a fazer um backup antes de efetuar esse procedimento.

                Abs.
                Paulo.

                #104531
                Avatar de Victor ArmbrustVictor Armbrust
                Mestre

                  paulogerva matou a pau essa! Eu faria exatamente assim.

                  Abs
                  Victor

                  #104557
                  Avatar de Vivaldo NetoVivaldo Neto
                  Participante

                    Pessoal desculpe a demora pois os problemas resolveram atacar nesse final de mês, mas vamos lá..

                    @Claudeir_ti

                    Parceiro achei meio complicado esse método, mas nao posso me dar ao luxo de fazer o processo via SQLDeveloper, depois update e dropar na sequencia, mas toda ajuda é bem vinda.

                    A solução do paulogerva foi mais eficaz e rápida fiz, essa ja entrou para o diretório de Base de Conhecimento
                    valeu paulogerva

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