Pessoal,

 

Estou com um pequeno problema (que está me tirando o sono), por favor,
ajudem-me.

 

Cenário: PostgreSQL 8.3.6 on x86_64-pc-linux-gnu, compiled by GCC
gcc-4.3.real (Ubuntu 4.3.2-1ubuntu12) 4.3.2.

 

Problema: A função abaixo “deveria” organizar uma tabela de agendamento
(somente o horário), porém quando “chamo” a function ela coloca qualquer
horário menos o atual mais o intervalo, somente depois da terceira ou quarta
tentativa é que funciona.

 

O cliente pode ser tanto o Delphi, quanto o psql, quanto outro qualquer que
o problema persiste.

 

Abaixo segue a função, observem que existe um parâmetro de entrada (não o
uso por enquanto).

 

Repetindo, supondo que existam horários na agenda (registros) nos horários
de 8h, 9h, 10h e agora são 12h e “chamo” a function para atualizar a agenda
para reordenar por exemplo o que é 8h passaria para 12:10h (devido ao
intervalo) e assim por diante, mas, o sistema coloca qualquer horário menos
o que deveria ser (agora now()).

 

CREATE OR REPLACE FUNCTION "public"."fnc_titulovenc_controle_agenda"
("eCodCli" integer) RETURNS boolean AS

$body$

DECLARE

       -- Cursor para registros da agenda

       _Registro cursor for  select codcli,

                                    data

                               from titulosvenc_agenda

                              where cast(data as date)=current_date

                                and horafim is null

                                and automatico='S'

                              order by data asc;

       

       -- Variavel que recebera o resultset do cursor

       Registro record;

        

       -- Variavel para intervalo de tempo em minutos

       i integer;

       

       -- Valor de referencia para o horario de fim

       vData timestamp;

BEGIN

 -- Determinando o intervalo

 i:=10; 

 

 -- Abrindo o cursor

 open _Registro;

 

 

 loop

   fetch _Registro into Registro;

   exit when not found;

 

   vData :=(now() + (i||' minutes')::interval) as time;

   

   if cast(vData as time)<='18:00:00' then

 

     -- Atualizando a agenda

     update titulosvenc_agenda 

        set data= vData

      where codcli=registro.codcli

        and cast(data as date)=current_date;

 

     -- Atualizando a folha de rosto de cobrança

     update titulosvenc set dataagenda=vData where codcli=registro.codcli;

     

   end if;     

   

   i:=i+10;

 end loop;

 

close _Registro;

 

return true;

END;

$body$

LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

 

Conto com a ajuda de vocês,

 

Att.

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

Rubens José Rodrigues

T.I, Analista de Suporte

Tel: (27)3399-6419 / (27)9969-8081

[email protected]

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

Broker Nestlé do Brasil S/A

Rua José Ramos de Oliveira, 91, 29111-280

Nossa Senhora da Penha, Vila Velha, ES

(27)3399-6400 / (27)9975-0140

 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a