[firebase-br] Dúvida com Stored Procedure no FireBird

José Aparecido Pereira j.aparecido.p em gmail.com
Seg Maio 12 14:06:11 -03 2008


Olá pessoal,

Tenho um problema pra resolver com uma Stored Procedure, já tentei de
algumas formas, mas até então ainda não deu certo.

O problema é o seguinte: Preciso usar o Filtro usando  ( IN ) na cláusula
WHERE,  para retornar uma faixa de registros, quando utilizo somente um
caracter, funciona normal, quando acrescento mais de um, não retorna nada.

Ex.: O Parâmetro TIPOENT = B, retorna normal o período;
       O Parâmetro TIPOENT = B,D não retorna nenhum registro.

O Parâmetro foi testado com o Tipo CHAR e VARCHAR ( input ).


Código SQL usando a sintax FOR SELECT;
...
  FOR SELECT DISTINCT( EXTRACT( YEAR  FROM M.MOVDATAVENC ) ),
                     ( EXTRACT( MONTH FROM M.MOVDATAVENC ) )
    FROM TMMOVIMENTO M
    WHERE M.MOVDATAVENC BETWEEN :DATAINI AND :DATAFIM
    AND   M.MOVTIPODOAC IN( :TIPOENT )
    INTO :Ano, :Mes DO
    BEGIN
...

Código SQL usando a sinxtax FOR EXECUTE STATEMENT;
...
  sSQL = 'SELECT DISTINCT( EXTRACT( YEAR  FROM M.MOVDATAVENC ) ), ( EXTRACT(
MONTH FROM M.MOVDATAVENC ) ) ';
  sSQL = sSQL || 'FROM TMMOVIMENTO M ';
  sSQL = sSQL || 'WHERE M.MOVDATAVENC BETWEEN ''' || :DATAINI || '''' || '
AND ''' || :DATAINI || '''';
  sSQL = sSQL || 'AND   M.MOVTIPODOAC IN( ''' || :TIPOENT || '''' || ' )';

   FOR EXECUTE STATEMENT
      sSQL
   INTO :Ano, :Mes DO
   BEGIN
...

Esta segunda Opção seria mais interessante no caso que estou utilizando,
porque tenho mais poder para interagir com a query, em outros critérios a
serem feitos...
A pergunta é:
Como ficaria a sintax do parâmetro com tipo caracter, utilizando o Filtro (
IN ) na cláusula WHERE?

Obs.: Estou utilizando o FireBird 1.5

Obrigado,

José Aparecido



Mais detalhes sobre a lista de discussão lista