[firebase-br] Erro em FOR EXECUTE STATEMENT (Opa!)

dvdmengarda em hotmail.com dvdmengarda em hotmail.com
Seg Mar 13 10:02:01 -03 2006


Desculpem-me, segue a mensagem correta:


Criei a SP abaixo pelo ibexpert sem qualquer problema na compilação. Quando executo a SP, o ibexpert reporta o seguinte erro: 

'expression evaluation not supported
 .
 expression evaluation not supported.'

Alterando a procedure e fazendo a utilização de FOR SELECT ... DO com o mesmo script do anterior a procedure executa normalmente. Existe alguma limitação para o "for execute statement"?

Grato pela atenção.


David

*****************************************************************************************************************************************
/* usando "for execute statement" /*
create procedure geralcto(tipo_venda varchar(2), data_emissao date)
returns (numero_lct integer, data_lct date, debito varchar(10), credito varchar(10), valor numeric(10, 2))
as
declare variable v_script varchar(512);
begin
  data_lct = data_emissao;
  if (tipo_venda = 1) then
     v_script = 'select contacliente, contavendas, valorduplicata from parcelas where (dataemissao = ' || :data_emissao || ')';
else
     v_script = 'select contacliente, contavendas, valortitulo from vendas where (dataemissao = ' || :data_emissao || ' and cancelamento = 1)';
  for execute statement
    v_script
    into
      :debito,
      :credito,
      :valor
  do
    begin
      numero_lct = numero_lct + 1;
      suspend;
    end
end;

*****************************************************************************************************************************************
/* usando "for select ... do" /*
create procedure geralcto(tipo_venda varchar(2), data_emissao date)
returns (numero_lct integer, data_lct date, debito varchar(10), credito varchar(10), valor numeric(10, 2))
as
begin
  data_lct = data_emissao;
  if (tipo_venda = 1) then
    for select 
      contacliente, contavendas, valorduplicata from parcelas where (dataemissao = :data_emissao)
      into
        :debito,
        :credito,
        :valor
    do
      begin
        numero_lct = numero_lct + 1;
        suspend;
      end

  else
    for select 
      contacliente, contavendas, valortitulo from vendas where (dataemissao = :data_emissao and cancelamento = 1)
        into
        :debito,
        :credito,
        :valor
    do
      begin
        numero_lct = numero_lct + 1;
        suspend;
      end
end;



Mais detalhes sobre a lista de discussão lista