[firebase-br] registrar contador para ocorrências

CMFilg cmfilg em gmail.com
Ter Dez 23 09:34:14 -03 2008


Obrigadão Kelver,


era exatamento isso que eu precisava...

a minha tabela já tem uma chave primária (eu consegui implementar quando
importei os dados)...

Carlos

2008/12/22 Kelver Merlotti <kmerlotti em gmail.com>

> se a necessidade é de apenas visualizar um sequencial pra cada
> processo, aqui vai uma procedure:
>
> SET TERM ^ ;
>
> CREATE PROCEDURE SEL_PROCESSOS
> returns (
>    sequencial integer,
>    processo varchar(20),
>    data timestamp)
> as
> declare variable id_processo varchar(20);
> begin
>  FOR SELECT DISTINCT(A.PROCESSO) FROM TRAMITACOES A INTO :ID_PROCESSO DO
>  BEGIN
>    SEQUENCIAL = 0;
>    FOR SELECT T.PROCESSO, T.DATA FROM TRAMITACOES T WHERE
>    T.PROCESSO = :ID_PROCESSO INTO :PROCESSO, :DATA DO
>    BEGIN
>      SEQUENCIAL = SEQUENCIAL + 1;
>      SUSPEND;
>    END
>  END
> end^
>
> SET TERM ; ^
>
> aí basta vc fazer "select * from SEL_PROCESSOS" que o resultado será:
>
> SEQUENCIAL      PROCESSO        DATA
> 1       2008231100001-7 23/11/2008 20:00:00
> 2       2008231100001-7 29/11/2008 18:00:00
> 1       2008241100003-5 24/11/2008 21:52:02
> 2       2008241100003-5 25/11/2008 15:00:00
> 1       2008241100005-9 24/11/2008 22:00:00
> 2       2008241100005-9 26/11/2008 17:30:00
> 3       2008241100005-9 29/11/2008 21:45:00
>
> Agora.. se a necessidade for de armazenar este sequencial na tabela,
> vc precisará da seguinte procedure:
> (supondo que o campo SEQ já exista na tabela)
>
> SET TERM ^ ;
>
> CREATE PROCEDURE SEL_PROCESSOS
> returns (
>    sequencial integer,
>    processo varchar(20),
>    data timestamp)
> as
> declare variable id_processo varchar(20);
> begin
>  FOR SELECT DISTINCT(A.PROCESSO) FROM TRAMITACOES A INTO :ID_PROCESSO DO
>  BEGIN
>    SEQUENCIAL = 0;
>    FOR SELECT T.PROCESSO, T.DATA FROM TRAMITACOES T WHERE
>    T.PROCESSO = :ID_PROCESSO INTO :PROCESSO, :DATA DO
>    BEGIN
>      SEQUENCIAL = SEQUENCIAL + 1;
>      UPDATE TRAMITACOES SET SEQ = :SEQUENCIAL WHERE
>      DATA = :DATA AND
>      PROCESSO = :PROCESSO;
>    END
>  END
>  SUSPEND;
> end^
>
> SET TERM ; ^
>
> Dessa maneira, uma vez executada a procedure, basta um SELECT * FROM
> TRAMITACOES pra ver os registros com o campo SEQ preenchidos.
>
> Espero ter ajudado! ;-)
>
> Abraços!
>
> 2008/12/22 Sandro Souza <escovadordebits em gmail.com>
>  >
> > Bom dia/tarde CMFilg.
> >
> > Minha humilde opinião é que você deveria criar uma chave primária (caso
> > ainda não exista), ou no mínimo, um índice contendo os campos processo e
> > sequencial.
> >
> > Para obter o próximo sequencial de um processo, você pode consultar o
> maior
> > valor do último sequencial do processo a ser utilizado na tramitassão,
> por
> > exemplo:
> >
> > SELECT MAX(SEQUENCIAL) FROM TRAMITACAO WHERE PROCESSO = '2008241100005-9'
> >
> > Caso o valor retornado seja NULL, assuma o valor 1 para o sequencial da
> > tramitação, caso contrário, apenas incremente o valor retornado e o
> utilize
> > como o valor para o sequencial da nova tramitação.
> >
> > É apenas uma sugestão.
> >
> > Espero ter ajudado mais que atrapalhado.
> >
> > 2008/12/22 CMFilg <cmfilg em gmail.com>
> >
> > > Tenho a tabela tramitacao nela são registrados: Processo,
> DataTramitacao,
> > > Status, Destino, Sequencial, Responsavel
> > > cada Processo pode ser tramitado N vezes
> > > a idéia é que seja incrementado o Sequencial a cada tramitação para o
> mesmo
> > > processo.
> > >
> > > o problema é que o banco foi importado do ACCESS e não tinha essa
> > > preocupação.
> > > usando respostas da lista fiz o select abaixo:
> > >
> > > SELECT COUNT(*), a.PROCESSO FROM TRAMITACAO a
> > > GROUP BY a.PROCESSO
> > > HAVING COUNT(*) > 1
> > > ORDER BY a.PROCESSO
> > >
> > > o resultado foi mais ou menos o seguinte:
> > > count      processo
> > > 2             2008241100005-9
> > >  3             2008241100003-5
> > >  2             2008231100001-7
> > >
> > > são mais de 18000 processos cada um tem no mínimo 1 e às vezes 15
> > > tramitações...
> > >
> > > como é que eu implemento este incremento para os registros já
> existentes?
> > >
> > > qual a melhor forma pra incrementar ao adicionar um novo registro?
> > > ______________________________________________
> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > > http://www.firebase.com.br/fb/artigo.php?id=1107
> > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> > >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> --
> Kelver Merlotti
> Coordenador Editorial do Portal www.ActiveDelphi.com.br<http://www.activedelphi.com.br/>
> Contato: kelver em activedelphi.com.br
> Google: kmerlotti em gmail.com
> Msn: kmerlotti em hotmail.com
> Tem um segundo? Então, dá uma olhadinha nisso:
> Um site de publicidades, de Portugal, está pagando em euros (quase 3x
> mais que em reais) pra quem estiver disposto a:
> * Ler anúncios
> * Visitar sites
> * Clicar em banners
> * Navegar na NET
> * Ler e-mails
> * Convidar novos usuários
> O pagamento é feito em cheque! Registra lá!! Não custa nada! ;-)
> http://www.publipt.com/pages/index.php?refid=kmerlotti
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista