[firebase-br] RES: execute statement

Cleiton - Gmail cleitonmaciell em gmail.com
Qua Nov 4 12:59:44 -03 2009


Tenta fazer com essa procedure ai é menor.

CREATE SEQUENCE NUMERO_NF_EMP_1; 
CREATE SEQUENCE NUMERO_NF_EMP_2;
ALTER SEQUENCE NUMERO_NF_EMP_1 RESTART WITH 0;
ALTER SEQUENCE NUMERO_NF_EMP_2 RESTART WITH 0;

CREATE PROCEDURE LIXO (
    xemp varchar(20) )
returns (
    notafiscal integer)
as
declare variable nota varchar(20);
declare variable sentenca varchar(3000);
declare variable ngenerator varchar(50);
begin
   ngenerator = 'numero_nf_emp_'||:xemp;
   Sentenca = 'SELECT GEN_ID(' || :ngenerator || ', 1) FROM RDB$DATABASE';
   execute statement sentenca into :nota;

   notafiscal = cast(nota as integer);
   suspend;
end

tentei fazer assim, no final troquei alhos por bugalhos. Ela depura preenche
as variáveis como
realmente deve ser preenchidas. Mas quando executo ela F9 ocorre o erro.

):


-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Nivaldo Martins
Enviada em: quarta-feira, 4 de novembro de 2009 11:44
Para: FireBase
Assunto: Re: [firebase-br] execute statement

Olá Cleiton,

O símbolo || é um operador de concatenação e você está colocando entre
aspas. Ele está reconhecendo || :xemp|| como uma string porque está entre
aspas. Se você deseja inserir um espaço entre o valor do numero_nf_emp e
:xemp tente desta forma

select gen_id(numero_nf_emp_ || ' ' || :xemp,-1)



2009/11/4 CLEITON MACIEL REIS DA SILVA <cleitonmaciell em gmail.com>

> Olá bom dia a todos.
>
> Galera quando eu depuro essa procedure no IBExpert ela roda blz. Mas
quando
> eu executo pra valer ela causa um exceção.
>
>
>
----------------------------------------------------------------------------
---------------------------------------------------
>
> Unsuccessful execution caused by an unavailable  resource.
>
> Variable type (position 0) in EXECUTE STATEMENT 'select
> gen_id(numero_nf_emp_1,1' INTO does not match returned
>
> column type.
>
> At procedure 'SP_NUMERA_NF'
>
>
>
----------------------------------------------------------------------------
---------------------------------------------------
>
>
>
>
>
> -- essa procedure tem a funcção de gerar o numero de nota fiscal de acordo
> a
> empresa selecionada. Por isso uso a variavel no select do generator.
>
>
> CREATE PROCEDURE SP_NUMERA_NF (
>
>    tabela varchar(30),
>
>    xemp integer)
>
> returns (
>
>    notafiscal integer)
>
> as
>
> declare variable ult_nf integer;
>
> declare variable ult_vda integer;
>
> declare variable ult_outvda integer;
>
> declare variable ult_devvda integer;
>
> declare variable ult_devcpa integer;
>
> declare variable nvenda integer;
>
> declare variable noutvenda integer;
>
> declare variable ndevvenda integer;
>
> declare variable ndevcpa integer;
>
> begin
>
>   execute statement
>
>    'select gen_id(numero_nf_emp_'||:xemp||',1) as ULT_NF from
RDB$DATABASE'
> into :notafiscal;    -- quero retornar o numero gerado aqui.
>
> -- Aqui ele gerar o proximo numero de nota
> fiscal.
>
>
>
>
>   ult_nf = notafiscal;
>
>
>
>  -- exception teste;
>
>
>
>   select first 1 v.notafiscal, v.venda   from vendas v      where
> v.empresa  = :xemp and v.notafiscal = :notafiscal and v.serie = 'NF' into
> :ult_vda, :nvenda;
>
>   select first 1 ov.notafiscal, ov.venda from out_vendas ov where
> ov.empresa = :xemp and ov.notafiscal = :notafiscal and ov.serie = 'NF'
into
> :ult_outvda, :noutvenda;
>
>   select first 1 dv.notafiscal, dv.venda from dev_vendas dv where
> dv.empresa = :xemp and dv.notafiscal = :notafiscal and dv.serie = 'NF'
into
> :ult_devvda, :ndevvenda;
>
>   select first 1 dc.numero_nf_entrada, dc.compra from devcompras dc where
> dc.empresa = :xemp and dc.numero_nf_entrada = :notafiscal and dc.serie =
> 'NF' into :ult_devcpa, :ndevcpa;
>
>
>
> -- aqui ele vai procurar já existe algum registro com o numero de nota
> fiscal gerado
>
>
>
>   if (notafiscal = ult_vda) then
>
>   begin
>
>      execute statement
>
>      'select gen_id(numero_nf_emp_'||:xemp||',-1) as ULT_NF from
> RDB$DATABASE' into :ult_nf;
>
>      exception numero_utilizado ' A NOTA FISCAL '||cast(notafiscal as
> varchar(10))||' pertence a VENDA ['||cast(nvenda as varchar(20))||']';
>
>   end
>
>
>
>   if (notafiscal = ult_outvda) then
>
>   begin
>
>      execute statement
>
>      'select gen_id(numero_nf_emp_'||:xemp||',-1) as ULT_NF from
> RDB$DATABASE' into :ult_nf;
>
>      exception numero_utilizado ' A NOTA FISCAL '||cast(notafiscal as
> varchar(10))||' pertence a OUTRAS SAIDA, PEDIDO: ['||cast(noutvenda as
> varchar(20))||']';
>
>   end
>
>
>
>   if (notafiscal = ult_devvda) then
>
>   begin
>
>      execute statement
>
>      'select gen_id(numero_nf_emp_'||:xemp||',-1) as ULT_NF from
> RDB$DATABASE' into :ult_nf;
>
>      exception numero_utilizado '  A NOTA FISCAL '||cast(notafiscal as
> varchar(10))||' pertence a DEVOLUÇÃO de venda, PEDIDO: ['||cast(ndevvenda
> as
> varchar(20))||']';
>
>   end
>
>
>
>   if (notafiscal = ult_devcpa) then
>
>   begin
>
>      execute statement
>
>      'select gen_id(numero_nf_emp_'||:xemp||',-1) as ULT_NF from
> RDB$DATABASE' into :ult_nf;
>
>      exception numero_utilizado ' A NOTA FISCAL '||cast(notafiscal as
> varchar(10))||' pertence a DEVOLUÇÃO DE COMPRA : '||cast(ndevcpa as
> varchar(20))||']';
>
>   end
>
>   suspend;
>
> end
>
>
>
>
>
> o que pode esta errado, se na depuração passa e quando ela é excutada com
> F9
> ela ocorre erro.
>
> Existe algo errado no execute statement?
>
>
>
> Abraço galera.
>
> _____________________________
> Qualisoft Automação Comercial
> Barreiras - Bahia
> Cleiton Maciel
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista