GARANTIR DESCONTO

Fórum Firebird 1.5: quot;BLR syntax errorquot;. Como eu corrijo #47605

21/10/2004

0

E ae pessoal!

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_

_chiappone_

Responder

Posts

21/10/2004

Afarias

qual o código do SP ?


T+


Responder

Gostei + 0

21/10/2004

_chiappone_

Bom... ela eh bem grande... sem contar que depende de outra procedure...

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 ; ^




Responder

Gostei + 0

26/10/2004

_chiappone_

Ninguem pode me ajudar?

Por favor! nenhum chute?? :cry:


Responder

Gostei + 0

26/10/2004

Afarias

Bom, olhando rapidamente eu diria q o erro pode estar no EXECUTE ESTATMENT ...

...verifique se os SELECTs executados podem trazer + q 1 resultado, nesses casos use FOR EXECUTE STATEMENT


T+


Responder

Gostei + 0

27/10/2004

_chiappone_

Olá!

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!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar