[firebase-br] registrar contador para ocorrências

Kelver Merlotti kmerlotti em gmail.com
Seg Dez 22 22:24:13 -03 2008


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
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




Mais detalhes sobre a lista de discussão lista