2009/4/16 Rubens José Rodrigues <[email protected]>:
>
> 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;
Creio que com este cast você está armazenando em vData apenas a hora,
min, seg etc do dia, você está desprezando a parte referente a data, é
isto mesmo?
Recomenda-se fazer: i*'1 minute'::interval.
>
> 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;
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral