From: | "Paulo (O2 Tecnologia)" <paulo(at)o2tecnologia(dot)com(dot)br> |
---|---|
To: | "Hélder M(dot) Vieira" <hmv(at)mail(dot)telepac(dot)pt> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Problemas com Procedure no PostgreSQL |
Date: | 2009-04-17 15:08:07 |
Message-ID: | 49E89B57.2070007@o2tecnologia.com.br |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Funcionou 110%, o problema é conceitual, ainda estamos com pensando na
forma procedural do Firebird, nele não há necessidade do record, mas
estamos aprendendo e em breve estaremos agregando ajuda a lista.
Obrigado mesmo.
Paulo Santana
O2 Tecnologia em Sistemas
Hélder M. Vieira escreveu:
> Boa tarde.
>
> > acusado o seguinte erro "sintax error at or near "SELECT" at character
> > 487", e infelizmente não conseguimos achar o que esta errado, dai peço
>
>
> Refiz todo o texto, p.f. experimente e diga se resultou.
> Algumas das alterações que fiz são meramente estilísticas, outras têm
> a ver com questões gramaticais. As mais significativas são:
> 1. Transcrição para minúsculas. Do ponto de vista dos comandos plpgsql
> julgo que é indiferente, mas o uso de maiúsculas para nomear objectos
> no Postgres não é vantajoso
> 2. Declaração de parâmetros. Os alias já não são necessários, os
> parâmetros podem ser utilizados por nome em vez de $1, $2, etc...
> 2. Correcção das estruturas if .. then .. end if
> 3. Reformulação dos ciclos for .. in .. loop .. end loop, que passam a
> usar uma variável de tipo registo ( declarada como 'rdat record' )
> 4. Supressão de alias nos select e update, uma vez que não há join
> envolvidos
>
> Cumprimentos,
>
> Hélder M. Vieira
>
> create or replace function trava_inadimplentes ( pdias_vencido
> integer, pund_local varchar(3), pcnpj varchar(18) ) returns boolean as
> $$
> declare
> spermite_bloqueio varchar(1);
> inro_registros integer;
> --
> rdat record;
> begin
> if ( pcnpj = '' ) then
>
> for rdat in
> select tipo_doc as sfat_documento ,
> fil_orig as sfat_emissora ,
> fatura as ifat_numero ,
> ano as sfat_ano ,
> parcela as ifat_parcela ,
> cgc as scod_cliente
> from ctas_receber
> where ( status not in ( 'ca', 'co' ) ) and ( dt_pagto is
> null )
> and ( ( current_timestamp - dt_vencto ) >= pdias_vencido )
> order by dt_vencto, tipo_doc, fil_orig, fatura, ano
> loop
> select permite_protesto
> from clientes
> where cgc = rdat.scod_cliente
> into spermite_bloqueio;
> if (spermite_bloqueio = 't') then
> --
> update clientes
> set inadimplente = 't' ,
> operador = 'bloqueio automatico' ,
> dt_alteracao = current_timestamp
> where cgc = rdat.scod_cliente;
> --
> insert into hist_cobranca
> values ( rdat.sfat_documento, rdat.sfat_emissora,
> rdat.ifat_numero, rdat.sfat_ano, rdat.ifat_parcela, current_timestamp,
> pund_local, 'bloqueio automatico de inadimplente', 'bloqueio
> automatico', current_timestamp );
> end if;
> end loop;
>
> else
>
> for rdat in
> select tipo_doc as sfat_documento ,
> fil_orig as sfat_emissora ,
> fatura as ifat_numero ,
> ano as sfat_ano ,
> parcela as ifat_parcela ,
> cgc as scod_cliente
> from ctas_receber
> where ( status not in ( 'ca', 'co' )) and ( dt_pagto is null )
> and ( ( current_timestamp - cob.dt_vencto ) >=
> pdias_vencido )
> and ( cgc = pcnpj )
> order by dt_vencto, tipo_doc, fil_orig, fatura, ano
> loop
>
> select permite_protesto
> from clientes
> where cgc = scod_cliente
> into spermite_bloqueio;
>
> if ( spermite_bloqueio = 't' ) then
> --
> update clientes
> set inadimplente = 't' ,
> operador = 'bloqueio automatico' ,
> dt_alteracao = current_timestamp
> where cgc = scod_cliente;
> --
> select count( fat_numero )
> from hist_cobranca
> where ( fat_documento = rdat.sfat_documento )
> and ( fat_emissora = rdat.sfat_emissora )
> and ( fat_numero = rdat.ifat_numero )
> and ( fat_ano = rdta.sfat_ano )
> and ( fat_parcela = ifat_parcela )
> and ( dta_lancamento = current_timestamp )
> into inro_registros;
> --
> if ( inro_registros = 0 ) then
> insert into hist_cobranca
> values ( rdat.sfat_documento, rdat.sfat_emissora,
> rdat.ifat_numero, rdat.sfat_ano, rdat.ifat_parcela, current_timestamp,
> pund_local, 'bloqueio automatico de inadimplente', 'bloqueio
> automatico', current_timestamp );
> end if;
> --
> end if;
>
> end loop;
>
> end if;
> return true;
> end;
> $$
> language 'plpgsql';
>
>
>
> __________ Information from ESET NOD32 Antivirus, version of virus
> signature database 4016 (20090417) __________
>
> The message was checked by ESET NOD32 Antivirus.
>
> http://www.eset.com
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4016 (20090417) __________
The message was checked by ESET NOD32 Antivirus.
From | Date | Subject | |
---|---|---|---|
Next Message | Paulo (O2 Tecnologia) | 2009-04-17 15:13:31 | Re: Problemas com Procedure no PostgreSQL |
Previous Message | Hélder M. Vieira | 2009-04-17 13:53:34 | Re: Problemas com Procedure no PostgreSQL |