select count(*) from TABELAS_DO_USUARIO

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
MarcioRM
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 11 Abr 2006 3:28 pm
Localização: Curitiba / PR

Boa tarde a todos

Esse é meu primeiro post aqui:

Não tenho experiência com sql, mas estou precisando muito de um que me retorne um count(*) das tabelas do usuário corrente, mais ou menos assim:

TABELA 01 = 1789
TABELA 02 = 3010
TABELA 03 = 5890
TABELA 04 = 2410
...

Se tiver alguma coisa pronta que me informe isso me falem e desculpem pelo posto desnecessário.

Agradeço a atenção
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Bem, não tem nada AUTOMATICO que faz isso...

O mais automático que tem é você consultar a USER_TABLES. Nessa tabela do dicionário, tem um campo chamado NUM_ROWS, que tem a quantidade de linhas da tabela.

Veja:

Selecionar tudo

SQL> select table_name, num_rows, last_analyzed
  2  from user_tables
  3  order by num_rows desc nulls last
  4  /

TABLE_NAME                       NUM_ROWS LAST_ANAL
------------------------------ ---------- ---------
TB_EMBARQUE_DEMONSTRATIVO        79894226 26-MAR-06
TB_EMBARQUE                      78932637 26-MAR-06
TB_LOG_RECEPCAO_AVERBCOL         29269790 26-MAR-06
TB_LOG_EMBARQUE                  18651547 26-MAR-06
Observe que a maior tabela aqui tem 79 milhões de linhas!
É claro que essa informação é falsa, pois esse campo NUM_ROWS corresponde ao número de linhas que tinha no dia que foi feito o último ANALYZE da tabela. Ou seja, se você não coleta estatísticas no seu banco periodicamente, talvez tenha informações bem erradas nesse campo.

Vamos provar isso:
Observe que fiz o count agora e minha tabela tem 81 milhões de linhas! (contra 79 mi coletado no dia 26 de Março)

Selecionar tudo

SQL> select count(*) from TB_EMBARQUE_DEMONSTRATIVO;

  COUNT(*)
----------
  81159845

SQL> 



Outra forma de fazer isso, é você criar um script que GERA os sql´s com COUNT. Assim:

Selecionar tudo

SQL> select 'SELECT COUNT(*) FROM '||table_name||';'
  2  from user_tables
  3  order by num_rows desc nulls last
  4  /

'SELECTCOUNT(*)FROM'||TABLE_NAME||';'
----------------------------------------------------
SELECT COUNT(*) FROM TB_EMBARQUE_DEMONSTRATIVO;
SELECT COUNT(*) FROM TB_EMBARQUE;
SELECT COUNT(*) FROM TB_LOG_RECEPCAO_AVERBCOL;
SELECT COUNT(*) FROM TB_LOG_EMBARQUE;
SELECT COUNT(*) FROM TT_LOG_EXCLUSAO;
SELECT COUNT(*) FROM TT_RECEPCAO_AVERBCOL;
SELECT COUNT(*) FROM TT_RECEPCAO_AVERBCOL_OK;
SELECT COUNT(*) FROM TT_CONCENTRACAO_RISCO;
SELECT COUNT(*) FROM TB_RATEIO_MOVIMENTO;
SELECT COUNT(*) FROM TB_COMISSAO;
SELECT COUNT(*) FROM TB_AUTO_COBERTURA;
SELECT COUNT(*) FROM TB_PARCELA_LOG;
SELECT COUNT(*) FROM TB_RATEIO_MOVIMENTO_CWI;
SELECT COUNT(*) FROM TB_MOVIMENTO_FINANCEIRO;
SELECT COUNT(*) FROM TB_LOG_LIQ_MOVIMENTO;
SELECT COUNT(*) FROM TB_ARQUIVO_EMBARQUE;
SELECT COUNT(*) FROM TB_MOVIMENTO_FINANCEIRO_CWI;
SELECT COUNT(*) FROM TB_RATEIO_GAP;
SELECT COUNT(*) FROM TB_ERRO_AVERBNET;
SELECT COUNT(*) FROM TB_PERC_COMISSAO_LOG;
SELECT COUNT(*) FROM TB_PARCELA_RECIBO;
SELECT COUNT(*) FROM TB_PARCELA_NOTA;
SELECT COUNT(*) FROM TB_RATEIO_MOVIMENTO_FABIO;
SELECT COUNT(*) FROM TB_MOVIMENTO_FINANCEIRO_FABIO;
SELECT COUNT(*) FROM TB_ITEM_PROPOSTA_CONTRATO;
SELECT COUNT(*) FROM TB_REGRA_PROCESSO_SEGURADO;
SELECT COUNT(*) FROM TB_PARCELA;
SELECT COUNT(*) FROM TB_GAP;
SELECT COUNT(*) FROM TB_LOG_LIQ_MOVIMENTO_FABIO;
Daí, basta executar o script, :-)

:-o
MarcioRM
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 11 Abr 2006 3:28 pm
Localização: Curitiba / PR

Muito obrigado dr_gori

Mais uma coisa só... :D

Como eu poderia fazer para exibir de qual tabela é cada "count".
Eu gerei o script definindo o spool arquivo.txt para os dois casos,
mas o arquivo com os totais foi gerado sem o nome da tabela, assim:

Selecionar tudo

  COUNT(*)
----------
     87855

Selecionar tudo

  COUNT(*)
----------
         6
Seria melhor assim:

Selecionar tudo

SELECT COUNT(*) FROM TABELA)!
  COUNT(*)
----------
     87855
     

Selecionar tudo

SELECT COUNT(*) FROM TABELA)!
  COUNT(*)
----------
         6
Como poderia fazer isso ?

Agradeço a atenção
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Que mordomia esse forum, hein?

Selecionar tudo

select 'SELECT '''||table_name||': '' TABELA, COUNT(*) FROM '||table_name||';'
from user_tables
order by num_rows desc nulls last
:-o
MarcioRM
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 11 Abr 2006 3:28 pm
Localização: Curitiba / PR

Muito obrigado dr_gori.

Espero daqui uns tempos poder estar colaborando com o fórum ao invés de só aproveitar das mordomias dele :D

Valeu
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes