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 __________ Information from ESET NOD32 Antivirus, version of virus signature database 4014 (20090416) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 4014 (20090416) __________ 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. http://www.eset.com