Osvaldo,

 

Não, o cast ali (vData :=(now() + (i||' minutes')::interval) as time;) a
variavel deveria pegar o “agora” mais o interval em minutos (exemplo
agora=data hoje + 09:00 + intervalo de i minutos).

 

Já aqui (if cast(vData as time)<='18:00:00'), ai sim, se pegando somente o
horario da variavel e for igual ou superior a 18h ignore o bloco de comando.

 

 

 

 

2009/4/16 Rubens José Rodrigues <rubens.rodrigues
<https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral>  em
batistarepresentacoes.com>:

 

> 

> 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

 

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