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
  

Mensagemem Ter, 11 Abr 2006 3:33 pm

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
MarcioRM
Localização: Curitiba / PR

Mensagemem Ter, 11 Abr 2006 4:49 pm

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:
Código: Selecionar todos
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)
Código: Selecionar todos
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:
Código: Selecionar todos
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
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Qua, 12 Abr 2006 11:22 am

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:

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

Seria melhor assim:

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

Como poderia fazer isso ?

Agradeço a atenção
MarcioRM
Localização: Curitiba / PR

Mensagemem Qua, 12 Abr 2006 11:33 am

Que mordomia esse forum, hein?

Código: Selecionar todos
select 'SELECT '''||table_name||': '' TABELA, COUNT(*) FROM '||table_name||';'
from user_tables
order by num_rows desc nulls last


:-o
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Sex, 14 Abr 2006 3:08 pm

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
MarcioRM
Localização: Curitiba / PR


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


      Voltar para SQL

      Quem está online

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