[firebase-br] Problema c/ SP e/ou IBExpert!!!!

Roger pikurim em hotmail.com
Qui Abr 17 09:05:16 -03 2008


Esta SP como era antes não dava erro:


SET TERM ^ ;

CREATE PROCEDURE CONSULTA_TIP (
    inicio timestamp,
    fim timestamp
returns (
    id_area integer,
    id_operacao varchar(10),
    limite integer,
    transporte integer,
    total integer,
    minutos integer,
    excedidos integer,
    ciclos integer)
as
BEGIN
  FOR
           SELECT AREA_ID,OPERACAO_ID,
           AVG(DURACAO) TOTAL,
           AVG(TRANSPORTE) TRANSPORTE,
           AVG(LIMITE) LIMITE,
           CASE WHEN COUNT(1) > 1 THEN COUNT(1) ELSE 0 END CICLOS,
           SUM(CASE WHEN EXCEDIDO > 0 THEN 1 ELSE 0 END) EXCEDIDOS,
           SUM(EXCEDIDO) MINUTOS

    FROM PROCESSADOS
    WHERE (INICIO >= :INICIO) AND (TERMINO <= :FIM)

    GROUP BY 1,2
    INTO :ID_AREA,
         :ID_OPERACAO,
         :TOTAL,
         :TRANSPORTE,
         :LIMITE,
         :CICLOS,
         :EXCEDIDOS,
         :MINUTOS
  DO
  BEGIN
    SUSPEND;
  END
END^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE CONSULTA_TIP TO SYSDBA;



E ESTA CONTINUA C/ AQUELA MENSAGEM:

SET TERM ^ ;

CREATE PROCEDURE CONSULTA_TIP (
    inicio timestamp,
    fim timestamp,
    turno varchar(5))
returns (
    id_area integer,
    id_operacao varchar(10),
    limite integer,
    transporte integer,
    total integer,
    minutos integer,
    excedidos integer,
    ciclos integer)
as
BEGIN
  FOR EXECUTE STATEMENT
    'SELECT AREA_ID,OPERACAO_ID,
           AVG(DURACAO) TOTAL,
           AVG(TRANSPORTE) TRANSPORTE,
           AVG(LIMITE) LIMITE,
           CASE WHEN COUNT(1) > 1 THEN COUNT(1) ELSE 0 END CICLOS,
           SUM(CASE WHEN EXCEDIDO > 0 THEN 1 ELSE 0 END) EXCEDIDOS,
           SUM(EXCEDIDO) MINUTOS

    FROM PROCESSADOS
    WHERE (INICIO >= ''' || :INICIO || ''') AND (TERMINO <= ''' || :FIM || 
''') AND (TURNO IN (' || :TURNO || '))

    GROUP BY 1,2'
    INTO :ID_AREA,
         :ID_OPERACAO,
         :TOTAL,
         :TRANSPORTE,
         :LIMITE,
         :CICLOS,
         :EXCEDIDOS,
         :MINUTOS
  DO
  BEGIN
    SUSPEND;
  END
END^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE CONSULTA_TIP TO SYSDBA;



"Carlos H. Cantu (TeamFB)" <listas em warmboot.com.br> 
escreveu na notícia da mensagem:1136071589.20080416160150 em warmboot.com.br...
> A mensagem de erro é clara: em alguma situação especifica, o comando
> dinâmico que foi montado está retornando um dado de tipo diferente
> da variável onde está sendo atribuído.
>
> O execute statment não pode ser validado no momento de compilação da
> procedure, pois o comando a ser executado pode mudar a cada execução.
>
> []s
> Cantu (Membro do TeamFB - FireBase)
> http://www.warmboot.com.br
> FireBase - http://www.FireBase.com.br
> Blog - http://blog.firebase.com.br
>
> CSF> bah, ninguem?????
>
> CSF> Roger escreveu:
>>> A Stored procedure abaixo está compilada e tudo mais, só que as vezes,
>>> conforme a data que passo por parâmetro dá o seguinte erro:
>>>
>>>
>>> Unsuccessful execution caused by an unavailable resource
>>> Variable type (position 0) in EXECUTE STATEMENT 'SELECT
>>> AREA_ID,OPERACAO_ID,INTO does not match returned column type.
>>> At procedure 'CONSULTA_TIP'.
>>>
>>>
>>> A tabela PROCESSADOS tem 800 mil registros.
>>>
>>> ______
>>>
>>>
>>> SET TERM ^ ;
>>>
>>> CREATE PROCEDURE CONSULTA_TIP (
>>>     turno varchar(5),
>>>     inicio timestamp,
>>>     fim timestamp)
>>> returns (
>>>     id_operacao varchar(10),
>>>     limite bigint,
>>>     transporte bigint,
>>>     total bigint,
>>>     minutos bigint,
>>>     excedidos bigint,
>>>     ciclos bigint,
>>>     id_area bigint)
>>> as
>>> BEGIN
>>>   FOR EXECUTE STATEMENT
>>>     'SELECT AREA_ID,OPERACAO_ID,
>>>            AVG(DURACAO) TOTAL,
>>>            AVG(TRANSPORTE) TRANSPORTE,
>>>            AVG(LIMITE) LIMITE,
>>>            CASE WHEN COUNT(1) > 1 THEN COUNT(1) ELSE 0 END CICLOS,
>>>            SUM(CASE WHEN EXCEDIDO > 0 THEN 1 ELSE 0 END) EXCEDIDOS,
>>>            SUM(EXCEDIDO) MINUTOS
>>>
>>>     FROM PROCESSADOS
>>>     WHERE ((INICIO >= ''' || :INICIO || ''') AND (TERMINO <= ''' || :FIM 
>>> ||
>>> ''')) AND TURNO IN (' || :TURNO || ')
>>>
>>>     GROUP BY AREA_ID,OPERACAO_ID'
>>>     INTO :ID_AREA,
>>>          :ID_OPERACAO,
>>>          :TOTAL,
>>>          :TRANSPORTE,
>>>          :LIMITE,
>>>          :CICLOS,
>>>          :EXCEDIDOS,
>>>          :MINUTOS
>>>   DO
>>>   BEGIN
>>>     SUSPEND;
>>>   END
>>> END^
>>>
>>> SET TERM ; ^
>>>
>>> GRANT EXECUTE ON PROCEDURE CONSULTA_TIP TO SYSDBA;
>>>
>>>
>>>
>>> ______________________________________________
>>> 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
>>>
>
>
> CSF> ______________________________________________
> CSF> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> CSF> Para saber como gerenciar/excluir seu cadastro na lista, use:
> CSF> http://www.firebase.com.br/fb/artigo.php?id=1107
> CSF> 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