pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Paulo (O2 Tecnologia) <paulo@o2tecnologia.com.br>
To: pgsql-sql@postgresql.org
Subject: Problemas com Procedure no PostgreSQL
Date: Fri, 17 Apr 2009 08:38:50 -0300
Message-ID: <49E86A4A.4060507@o2tecnologia.com.br> (raw)



Estamos migrando nossos sistemas de Firebird para PostgreSQL, estamos 
com 99% do processo homologado, mas tropeçamos numa store procedure, que 
não estamos conseguindo portar, ao tentarmos inclui-la no PostgreSQL, é 
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 
ajuda aos colegas. Segue abaixo a procedure:

CREATE OR REPLACE FUNCTION TRAVA_INADIMPLENTES (
    DIAS_VENCIDO INTEGER,
    UND_LOCAL VARCHAR(3),
    CNPJ VARCHAR(18))
RETURNS BOOLEAN
AS
$$
DECLARE

pDIAS_VENCIDO ALIAS FOR $1;
pUND_LOCAL ALIAS FOR $2;
pCNPJ ALIAS FOR $3;

sPERMITE_BLOQUEIO VARCHAR(1);
sFAT_DOCUMENTO VARCHAR(2);
sFAT_EMISSORA VARCHAR(3);
iFAT_NUMERO INTEGER;
sFAT_ANO VARCHAR(2);
iFAT_PARCELA INTEGER;
sCOD_CLIENTE VARCHAR(18);
iNRO_REGISTROS INTEGER;
BEGIN
   IF ( pCNPJ = '' ) THEN
   BEGIN
      FOR
         SELECT COB.TIPO_DOC, COB.FIL_ORIG, COB.FATURA, COB.ANO, 
COB.PARCELA, COB.CGC
         FROM CTAS_RECEBER COB
         WHERE ( COB.STATUS NOT IN ( 'CA', 'CO' )) AND ( COB.DT_PAGTO IS 
NULL )
           AND (( CURRENT_TIMESTAMP - COB.DT_VENCTO ) >= pDIAS_VENCIDO )
         ORDER BY COB.DT_VENCTO, COB.TIPO_DOC, COB.FIL_ORIG, COB.FATURA, 
COB.ANO
         INTO sFAT_DOCUMENTO, sFAT_EMISSORA, iFAT_NUMERO, sFAT_ANO, 
iFAT_PARCELA, sCOD_CLIENTE
      DO
      BEGIN
         SELECT CLI.PERMITE_PROTESTO
         FROM CLIENTES CLI
         WHERE CLI.CGC = sCOD_CLIENTE
         INTO sPERMITE_BLOQUEIO;

         IF (sPERMITE_BLOQUEIO = 'T') THEN
         BEGIN
            UPDATE CLIENTES CLI
            SET CLI.INADIMPLENTE = 'T', CLI.OPERADOR = 'BLOQUEIO 
AUTOMATICO', CLI.DT_ALTERACAO = CURRENT_TIMESTAMP
            WHERE CLI.CGC = sCOD_CLIENTE;

            INSERT INTO HIST_COBRANCA
            VALUES ( sFAT_DOCUMENTO, sFAT_EMISSORA, iFAT_NUMERO, 
sFAT_ANO, iFAT_PARCELA, CURRENT_TIMESTAMP, pUND_LOCAL,
                     'BLOQUEIO AUTOMATICO DE INADIMPLENTE', 'BLOQUEIO 
AUTOMATICO', CURRENT_TIMESTAMP );
         END IF;
      END
   END IF
  ELSE
   BEGIN
      FOR
         SELECT COB.TIPO_DOC, COB.FIL_ORIG, COB.FATURA, COB.ANO, 
COB.PARCELA, COB.CGC
         FROM CTAS_RECEBER COB
         WHERE ( COB.STATUS NOT IN ( 'CA', 'CO' )) AND ( COB.DT_PAGTO IS 
NULL )
          AND (( CURRENT_TIMESTAMP - COB.DT_VENCTO ) >= pDIAS_VENCIDO )
          AND ( COB.CGC = pCNPJ )
         ORDER BY COB.DT_VENCTO, COB.TIPO_DOC, COB.FIL_ORIG, COB.FATURA, 
COB.ANO
         INTO sFAT_DOCUMENTO, sFAT_EMISSORA, iFAT_NUMERO, sFAT_ANO, 
iFAT_PARCELA, sCOD_CLIENTE
      DO
      BEGIN
         SELECT CLI.PERMITE_PROTESTO
         FROM CLIENTES CLI
         WHERE CLI.CGC = sCOD_CLIENTE
         INTO sPERMITE_BLOQUEIO;

         IF (sPERMITE_BLOQUEIO = 'T') THEN
         BEGIN
            UPDATE CLIENTES CLI
            SET CLI.INADIMPLENTE = 'T', CLI.OPERADOR = 'BLOQUEIO 
AUTOMATICO', CLI.DT_ALTERACAO = CURRENT_TIMESTAMP
            WHERE CLI.CGC = sCOD_CLIENTE;

            SELECT COUNT( HIS.FAT_NUMERO )
            FROM HIST_COBRANCA HIS
            WHERE ( HIS.FAT_DOCUMENTO = sFAT_DOCUMENTO ) AND ( 
HIS.FAT_EMISSORA = sFAT_EMISSORA ) AND ( HIS.FAT_NUMERO = iFAT_NUMERO )
             AND ( HIS.FAT_ANO = sFAT_ANO ) AND ( HIS.FAT_PARCELA = 
iFAT_PARCELA ) AND ( HIS.DTA_LANCAMENTO = CURRENT_TIMESTAMP )
            INTO iNRO_REGISTROS;

            IF (iNRO_REGISTROS = 0) then
         BEGIN
           INSERT INTO HIST_COBRANCA
           VALUES ( sFAT_DOCUMENTO, sFAT_EMISSORA, iFAT_NUMERO, 
sFAT_ANO, iFAT_PARCELA, CURRENT_TIMESTAMP, pUND_LOCAL,
                    'BLOQUEIO AUTOMATICO DE INADIMPLENTE', 'BLOQUEIO 
AUTOMATICO', CURRENT_TIMESTAMP );
         END
      END
    END
  END


  RETURN TRUE;
END;
$$

LANGUAGE 'plpgsql';





__________ Information from ESET NOD32 Antivirus, version of virus signature database 4014 (20090416) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com





view thread (5+ messages)  latest in thread

Message-ID: <49E86A4A.4060507@o2tecnologia.com.br>
Permalink:  ../49E86A4A.4060507@o2tecnologia.com.br/
Also on:    postgresql.org/message-id/49E86A4A.4060507@o2tecnologia.com.br

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: paulo@o2tecnologia.com.br
  Subject: Re: Problemas com Procedure no PostgreSQL
  In-Reply-To: <49E86A4A.4060507@o2tecnologia.com.br>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox