[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