[firebase-br] Usando When Do

Valdir Marcos valdir.marcos em ig.com.br
Qua Out 12 12:50:49 -03 2005


Para solucionar um problema igual ao seu, eu criei um campo na tabela de 
Empresas, e uso uma SP para fornecer o número correto de seqüência.
Tenho outras tabelas com 50 mil registros sem problemas de performance nessa 
técnica.
Um outra alternativa com performance, teoricamente, ainda melhor seria vc 
criar uma tabela com 'números passados disponíveis', que seria populada um 
ou duas vezes por dia, e consultada 24h.


/**********************************************************/
/*             P031 - Procedure sp_Colaborador            */
/**********************************************************/

Set Term ^;
Create Procedure sp_Colaborador (iEmpresa integer)
Returns ( iColaborador integer)
as
  Declare Variable iTemporario Integer;
begin
  iTemporario = 1;
  for Select CodCol From Colaboradores
      Where CodEmp = :iEmpresa
      Order By CodCol
      Into :iColaborador
  do
  begin
    if (iTemporario < iColaborador) then
      Leave;

    iTemporario = iTemporario + 1;
  end

  if (iTemporario < iColaborador) then
    iColaborador = iTemporario;
  else
  begin
    Select Colaborador From Empresas
    Where CodEmp = :iEmpresa
    Into :iColaborador;
    iColaborador = iColaborador + 1;

    Update Empresas
    Set Colaborador = :iColaborador
    Where CodEmp = :iEmpresa;
  end
end^

Set Term ^;
Commit;
/**********************************************************/

Um abraço,

Valdir


----- Original Message ----- 
From: "Alisson" <arsuart em uol.com.br>
To: <lista em firebase.com.br>
Sent: Tuesday, October 11, 2005 6:26 PM
Subject: [firebase-br] Usando When Do


> eae pessoal..
> tenho uma duvida q eh o seguinte..
> quando uso o When Any Do
> em uma SP...
>
> eu fiz uma condição para ser executada dentro desse any..
>
> mas percebi q quando acontece uma excessao, ele ignora a mensagem q eu 
> escrevi no exception e manda um erro de SQL ERROR ou coisa do tipo..
> nao tenho mesmo como mostrar meu erro de excessao neh.../????
>
> essa eh minha duvida.. pq eu queria fazer o seguinte..
>
>  When Any do
>  Begin
>     If (:Tipo = 'B') Then
>        If (:Cod_Movimento <> 0) Then
>           Execute Statement
>               'SET GENERATOR GEN_MOVIMENTOBANCARIO_ID TO 
> (:Cod_Movimento -1);';
>     Exception;
>   Exit;
>  End
>
> Quero q quando acontecer uma excessao... meu Generator seja voltado ao 
> numero q estava.. para nao perder codigo...
> e mesmo eu usando o exception lah entre o when.. nao adianta.. nao traz a 
> mensagem de excessao q eu queria.. ou melhor q fiz..!!!!
>
> realmente nao tem jeito neh..???
> alguem tem alguma ideia legal sobre como controlar os IDs do generator.. 
> pra nao ficar perdendo..!!!!???
>
> obrigado pela ajuda desde jah..!!!!
>
> -- 
> Abraços
>
> Alisson
>
>
>
>
>


--------------------------------------------------------------------------------


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista