Received: from localhost (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id 82406632582 for ; Fri, 17 Apr 2009 08:51:10 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 70171-01 for ; Fri, 17 Apr 2009 08:51:01 -0300 (ADT) X-Greylist: delayed 00:15:16.960589 by SQLgrey-1.7.6 Received: from hm1479-9.locaweb.com.br (hm1479-9.locaweb.com.br [201.76.49.79]) by mail.postgresql.org (Postfix) with ESMTP id B502B632242 for ; Fri, 17 Apr 2009 08:51:07 -0300 (ADT) Received: from hm401.locaweb.com.br (10.1.10.37) by hm1479-9.locaweb.com.br (PowerMTA(TM) v3.5r12) id ht1mim0nvdcm for ; Fri, 17 Apr 2009 08:35:40 -0300 (envelope-from ) Received: from unknown (HELO ?192.168.1.210?) (paulo@o2tecnologia.com.br@201.83.122.163) by hm401.locaweb.com.br with SMTP; 17 Apr 2009 11:35:39 -0000 X-LocaWeb-COR: locaweb_2009_x-mail Message-ID: <49E86A4A.4060507@o2tecnologia.com.br> Date: Fri, 17 Apr 2009 08:38:50 -0300 From: "Paulo (O2 Tecnologia)" User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: pgsql-sql@postgresql.org Subject: Problemas com Procedure no PostgreSQL Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=1.93 tagged_above=0 required=5 tests=UPPERCASE_75_100=1.93 X-Spam-Level: * X-Archive-Number: 200904/99 X-Sequence-Number: 32445 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