Fórum Firebird 1.5: quot;BLR syntax errorquot;. Como eu corrijo #47605
21/10/2004
0
To tendo um probleminha ao atualizar o codigo de uma stored procedure...
Alguns dados importantes:
Versao do Firebird: 1.5
Versao do IBExpert: 2004.06.17
Versao do IBOConsole: Nao sei, baixei hoje (21/10/04 no firebase)
SO: WindowsXP
Depois de fazer as alteracoes na procedure, eu aperto Ctrl+F9 (ou clico no raio), e ele diz que script foi executado com sucesso, e permite o commit.
Mas quando eu clico em commit, ele dah esse erro:
Invalid token. Invalid request BLR at offset 4697. BLR syntax error: expeted record selection expression clause at offset 7697, encountered 43
Jah o IBOConsole acusa o erro assim:
ISC ERROR CODE:335544343 ISC ERROR MESSAGE: invalid request BLR at offset 4697 BLR syntax error: expected record selection expression clause at offset 4697, encountered 43
Fui no isql.exe, dentro da pasta bin do firebird e o erro foi esse:
Statement failed, SQLCODE = -104 invalid request BLR at offset 4697 -BLR syntax error: expected record selection expression clause at offset 4697, encountered 43
Alguem conhece esse erro?
Me ajudem, por favor!
Desde já, muito obrigado.
_chiappone_
Curtir tópico
+ 0Posts
21/10/2004
Afarias
T+
Gostei + 0
21/10/2004
_chiappone_
ALTER PROCEDURE SP_FATURAROMANEIO ( ROMANEIO FLOAT, SEQUENCIA INTEGER, USUARIO CHAR(30), BANCOCARTEIRA INTEGER, AGENCIACARTEIRA INTEGER, IEMPRESA INTEGER) AS DECLARE VARIABLE QTD FLOAT; DECLARE VARIABLE PEDIDO FLOAT; DECLARE VARIABLE PEDIDOSEQ INTEGER; DECLARE VARIABLE TOTAL NUMERIC(18,2); DECLARE VARIABLE PARCELAS INTEGER; DECLARE VARIABLE ICONT INTEGER; DECLARE VARIABLE NRESTO NUMERIC(18,2); DECLARE VARIABLE NVALOR NUMERIC(18,2); DECLARE VARIABLE IDIAS INTEGER; DECLARE VARIABLE FNOTA FLOAT; DECLARE VARIABLE ICLIENTE INTEGER; DECLARE VARIABLE IREPRESENTANTE INTEGER; DECLARE VARIABLE IVENCIMENTO INTEGER; DECLARE VARIABLE ICOMISSAO INTEGER; DECLARE VARIABLE IVENCTOD INTEGER; DECLARE VARIABLE ENCERRA CHAR(1); Begin --Gravando Romaneio Na Tabela De Romaneios Faturados Insert Into Romaneio_Faturado Values ( :Romaneio, :Sequencia, :iEmpresa, :Usuario ); --Gravando Romaneio Na Tabela De Romaneios Faturados Insert Into Romaneio_Faturado Values ( :Romaneio, :Sequencia, :iEmpresa, :Usuario ); --Atualizando Flag De Faturado No Romaneio Update Romaneio Set Rom_Faturado = ´S´ Where Rom_Romaneio = :Romaneio And Rom_Sequencia = :Sequencia And Rom_Empresa = :iEmpresa; /* Pegando Dados Do Pedido E Do Cliente*/ Select Ped_Vencimento, Ped_Cliente, Ped_Representante, Ped_Comissao From Pedido Inner Join Romaneio On Ped_Pedido = Rom_Pedido And Ped_Sequencia = Rom_Pedidosequencia And Ped_Empresa = Rom_Empresa Where Rom_Romaneio = :Romaneio And Rom_Sequencia = :Sequencia And Rom_Empresa = :iEmpresa Into :Ivencimento, :Icliente, :Irepresentante, :Icomissao; --Pega Nro Da Nota Select Coalesce(Max(Ser_Sequencia),0) + 1 From Serie Where Ser_Serie = 99 and ser_empresa = :IEMPRESA Into :Fnota; --Atualizando Romaneio Update Itemromaneio Set Itemrom_Notafiscal = :Fnota, Itemrom_Serie = 99 Where Itemrom_Romaneio = :Romaneio And Itemrom_Sequencia = :Sequencia And Itemrom_Empresa = :iEmpresa; --Pega Total Pra Ver Se Gera Duplicata Select Sum(Itemrom_Quantidade * (Coalesce(Itemrom_Preco,0) + Coalesce(Itemrom_Compreco,0))) From Itemromaneio Where Itemrom_Romaneio = :Romaneio And Itemrom_Sequencia = :Sequencia And Itemrom_Empresa = :iEmpresa Into :Total; --Grava Notafiscal Insert Into Notafiscal ( Nf_Numero , Nf_Empresa , Nf_Cliente , Nf_Representante , Nf_Vencimento, Nf_Emissao , Nf_Flag , Nf_Tipofatura, Nf_Valornotafiscal, Nf_Valorproduto ,Nf_Comissao , Nf_Imprimiu , Nf_Tipo ,Nf_Serie,nf_Fornecedor ) Values ( :Fnota ,:Iempresa , :Icliente , :Irepresentante ,:Ivencimento , Current_Date , 0 ,´I´ , 0 , 0 ,:Icomissao , 1 , ´I´ ,99 ,0 ); --Grava Itemnotafiscal Insert Into Itemnotafiscal( Itemnf_Controle , Itemnf_Notafiscal , Itemnf_Produto, Itemnf_Quantidade , Itemnf_Preco , Itemnf_Empresa, Itemnf_Qtdpeca , Itemnf_Compreco , Itemnf_Serie ) Select (Select Coalesce(Max(Itemnf_Controle),0 ) + 1 From Itemnotafiscal ), I.Itemrom_Notafiscal,I.Itemrom_Produto, ( Select Coalesce(quantidade,0) From Sp_Peca_Quantidade ( null , ´Where Pec_Romaneio = ´ || I.Itemrom_Romaneio || ´ And Pec_Romaneiosequencia = ´ || I.Itemrom_Sequencia || ´ And Pec_Empresa = ´ || I.Itemrom_Empresa || ´ And Pec_Produto = ´ || I.Itemrom_Produto , 30 , null ) ), cast(0 as numeric(18,2)) , I.Itemrom_Empresa , (Select Count(*) From Peca P Where Pec_Romaneio = I.Itemrom_Romaneio And Pec_Romaneiosequencia = I.Itemrom_Sequencia And Pec_Empresa = I.Itemrom_Empresa And Pec_Produto = I.Itemrom_Produto And Pec_fase = ´5´ ), Coalesce(I.Itemrom_Preco,0)+Coalesce(I.Itemrom_Compreco,0),I.Itemrom_Serie From Itemromaneio I Where I.Itemrom_Romaneio =:Romaneio And I.Itemrom_Sequencia=:Sequencia And I.Itemrom_Empresa =:Iempresa; --Atualizando As PeçAs INSERT INTO PECA ( PEC_PRODUTO , PEC_FASE , PEC_DATASEPARADA , PEC_HORASEPARADA , PEC_EMPRESA , PEC_ROMANEIO , PEC_ROMANEIOSEQUENCIA , PEC_QUANTIDADE , PEC_USUARIO , PEC_DATALACTO , PEC_CONTROLE , PEC_ENCERRAMENTO ) SELECT ITEMROM_PRODUTO , 40 , current_date , current_date , ITEMROM_EMPRESA , :ROMANEIO , :SEQUENCIA , ITEMROM_QUANTIDADE , :USUARIO , current_date , (select coalesce(max(pec_controle),0) + 1 from peca) , 0 FROM ITEMROMANEIO; -- Gerando Duplicatas If (:Total > 0) Then Begin --Pegando Numero De Parcelas Do Vencimento Select Venc_Parcelas From Vencimento Where Venc_Codigo = :Ivencimento Into :Parcelas; --Calculando Resto E Valores Das Parcelas Nvalor = Total / Parcelas; Nresto = Total - ( Nvalor * :Parcelas ); -- Vencimento D + Select Parsist_Vencimentod From Parametros_Do_Sistema Where Parsist_Empresa = :Iempresa Into :Ivenctod; ICont = 1; While ( Icont <= Parcelas ) Do Begin --Pegando Vencimento Execute Statement ´Select Venc_Vencimento0´|| Icont || ´ From Vencimento Where Venc_Codigo = ´||IVencimento Into :Idias; --Gravando A Duplicata Insert Into Duplrec ( Duplr_Num,Duplr_Cliente, Duplr_Flagbx, Duplr_Numbx,Duplr_Canc,Duplr_Tipodup , Duplr_Agencia,Duplr_Banco, Duplr_Repres,Duplr_Datemi,Duplr_Valorpg,Duplr_Juros,Duplr_Valdesc, Duplr_Comissao, Duplr_Flagemit,Duplr_Empresa,Duplr_Usuario,Duplr_Controle, Duplr_Serie,Duplr_Sequencia,Duplr_Valor,Duplr_Datvenc ) Values ( :Fnota,:Icliente,´A´,0,0,1,:Agenciacarteira,:Bancocarteira, :Irepresentante,Current_Date,0,0,0,:Icomissao,0, (Select E.Emp_Codigo From Empresa E Where E.Emp_Flag = ´S´), :Usuario,´Duplicata Ref. Romaneio: ´|| Cast( :Romaneio As Char(20) ), 99,Case :Parcelas When 1 Then ´U´ Else Cast(:Icont As Char(1)) End, Case When (:Parcelas = 1) Or (:Parcelas <> :Icont) Then :Nvalor Else :Nvalor + :Nresto End ,Current_Date + :Idias - 1 + :Ivenctod ); Icont = Icont + 1 ; End -- Atualiza nota com nro de Duplicatas update notafiscal set nf_duplicata =:PARCELAS where nf_numero =:FNOTA and nf_serie = 99 and nf_empresa=:IEMPRESA; -- Atualiza parametro da nota update serie set ser_sequencia =:FNOTA Where Ser_Serie = 99 and ser_empresa = :IEMPRESA; --Verifica se encerra pedido ENCERRA = ´S´; For Select Distinct Rom_Pedido, Rom_PedidoSequencia From Romaneio Inner Join ItemRomaneio On ItemRom_Romaneio = Rom_Romaneio And ItemRom_Sequencia = Rom_Sequencia And ItemRom_Empresa = Rom_Empresa Where ItemRom_NotaFiscal =:FNOTA And ItemRom_Serie =99 And ItemRom_Empresa =:IEMPRESA into :PEDIDO,:PEDIDOSEQ do begin for Select ((QTDPEDIDA) - (QTDFATURADA) - (QTDENCERRADA)) From sp_PosicaoPedido(:PEDIDO,:PEDIDOSEQ,:IEMPRESA,(select parsist_tipo from parametros_do_sistema p where p.parsist_empresa = :IEMPRESA)) into :QTD do begin If (qtd <= 0 ) Then encerra =´S´; else begin encerra =´N´; Break; end end --Muda Flag do Pedido if (encerra = ´S´) then Begin Update Pedido Set Ped_Fase = ´1´ Where Ped_Pedido = :PEDIDO And Ped_Sequencia = :PEDIDOSEQ And Ped_Empresa = :IEMPRESA; end end End Exit; End
A outra procedure
SET TERM ^ ; ALTER PROCEDURE SP_PECA_QUANTIDADE ( IN_JOINS VARCHAR(1000), IN_WHERE VARCHAR(1000), IN_FASE INTEGER, IN_ORDER VARCHAR(1000)) RETURNS ( QUANTIDADE NUMERIC(18,3)) AS DECLARE VARIABLE VAR_STATEMENT VARCHAR(700); DECLARE VARIABLE VAR_QTDFASE NUMERIC(18,3); DECLARE VARIABLE VAR_QTDPROXIMAFASE NUMERIC(18,3); DECLARE VARIABLE VAR_PROXIMAFASE INTEGER; DECLARE VARIABLE VAR_STATEFASE VARCHAR(100); Begin If (Upper(Substring(In_Where From 1 For 5)) = ´WHERE´) Then Var_Statefase = ´And (Pec_Fase = ´ || In_Fase || ´) ´; Else Var_Statefase = ´Where Pec_Fase = ´ || In_Fase || ´ ´; Var_Statement = ´Select ´ || ´ Sum(Pec_Quantidade) ´ || ´From Peca p ´ || coalesce(In_Joins,´´) || ´ ´ || coalesce(In_Where,´´) || ´ ´ || coalesce(Var_Statefase,´´) || ´ ´ || coalesce(In_Order,´´) ; -- var_qtdfase = 2;-- Execute Statement Var_Statement Into Var_Qtdfase; Select coalesce(Min(F.Fas_Controle),0) From Fase F Where F.Fas_Controle > :in_fase Into Var_Proximafase; If (Upper(Substring(In_Where From 1 For 5)) = ´WHERE´) Then Var_Statefase = ´And (Pec_Fase = ´ || var_proximafase || ´) ´; Else Var_Statefase = ´Where Pec_Fase = ´ || var_proximafase || ´ ´; Var_Statement = ´Select ´ || ´ Sum(Pec_Quantidade) ´ || ´From Peca p ´ || coalesce(In_Joins,´´) || ´ ´ || coalesce(In_Where,´´) || ´ ´ || coalesce(Var_Statefase,´´) || ´ ´ || coalesce(In_Order,´´) ; Execute Statement Var_Statement Into Var_Qtdproximafase; quantidade = coalesce(var_qtdfase,0) - coalesce(var_qtdproximafase,0); Suspend; End ^ SET TERM ; ^
Gostei + 0
26/10/2004
_chiappone_
Por favor! nenhum chute?? :cry:
Gostei + 0
26/10/2004
Afarias
...verifique se os SELECTs executados podem trazer + q 1 resultado, nesses casos use FOR EXECUTE STATEMENT
T+
Gostei + 0
27/10/2004
_chiappone_
Creio que naum seja isso, amigo... pois a procedure naum chega neim a ser executada, entao naum tem como ele saber se vai ou naum trazer mais que um registro.
Sem contar que esse execute statement jah estava na procedure.
O erro comecou quando eu adicionei os seguintes codigos
--Atualizando As PeçAs INSERT INTO PECA ( PEC_PRODUTO , PEC_FASE , PEC_DATASEPARADA , PEC_HORASEPARADA , PEC_EMPRESA , PEC_ROMANEIO , PEC_ROMANEIOSEQUENCIA , PEC_QUANTIDADE , PEC_USUARIO , PEC_DATALACTO , PEC_CONTROLE , PEC_ENCERRAMENTO ) SELECT ITEMROM_PRODUTO , 40 , current_date , current_date , ITEMROM_EMPRESA , :ROMANEIO , :SEQUENCIA , ITEMROM_QUANTIDADE , :USUARIO , current_date , (select coalesce(max(pec_controle),0) + 1 from peca) , 0 FROM ITEMROMANEIO;
e
( Select Coalesce(quantidade,0) From Sp_Peca_Quantidade ( null , ´Where Pec_Romaneio = ´ || I.Itemrom_Romaneio || ´ And Pec_Romaneiosequencia = ´ || I.Itemrom_Sequencia || ´ And Pec_Empresa = ´ || I.Itemrom_Empresa || ´ And Pec_Produto = ´ || I.Itemrom_Produto , 30 , null ) ),
portanto o erro deve estar aí... mas eu naum estou enxergando esse erro!
Valeu!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)