- Este tópico contém 7 respostas, 5 vozes e foi atualizado pela última vez 12 anos, 1 mês atrás por Vivaldo Neto.
-
AutorPosts
-
22 de setembro de 2012 às 1:26 am #104463Vivaldo NetoParticipante
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-lasAlguem tem uma ideia???
Valeu
24 de setembro de 2012 às 3:27 pm #104467rmanParticipante@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;
25 de setembro de 2012 às 12:18 am #104489Vivaldo NetoParticipante@rman
Executei sua ideia mas me retornou somente “anonymous block completed”
será que executou mas não existe tabela vazia??25 de setembro de 2012 às 4:55 pm #104491rmanParticipante@vivaldo
Utilize o sqlplus e execute antes:
set serveroutput on
25 de setembro de 2012 às 6:50 pm #104493Claudeir Jose da Costa juniorParticipanteOlá 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.
26 de setembro de 2012 às 1:48 am #104495paulogervaParticipanteVocê 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.27 de setembro de 2012 às 10:26 pm #104531Victor ArmbrustMestrepaulogerva matou a pau essa! Eu faria exatamente assim.
Abs
Victor2 de outubro de 2012 às 10:45 pm #104557Vivaldo NetoParticipantePessoal 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 -
AutorPosts
- Você deve fazer login para responder a este tópico.