Problemas com Procedure no PostgreSQL

From: "Paulo (O2 Tecnologia)" <paulo(at)o2tecnologia(dot)com(dot)br>
To: pgsql-sql(at)postgresql(dot)org
Subject: Problemas com Procedure no PostgreSQL
Date: 2009-04-17 11:38:50
Message-ID: 49E86A4A.4060507@o2tecnologia.com.br
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

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

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Hélder M. Vieira 2009-04-17 12:27:40 Re: Problemas com Procedure no PostgreSQL
Previous Message Gerardo Herzig 2009-04-16 20:44:19 Re: finding UNIQUES in information_schema