[firebase-br] Pesquisar produto com alteração no preço

Paulo Geloramo paulogeloramo em terra.com.br
Qua Mar 16 15:20:54 -03 2011


Uma solução foi usando Execute Block, gostaria de encontrar
uma solução usando select ou sub-select, pois a solução
com SP ou Execute Block não pode ser usada, não posso
alterar o banco e Execute Block não passa pelos
componentes SQLDataSet devido aos dois pontos
antes dos parâmetros D2010.

Alguma sugestão usando select ou sub-select?

EXECUTE BLOCK RETURNS(
  CODIGOF_PRODUTO INTEGER,
  NOME_PRODUTO VARCHAR(30),
  CODIGOF_EDICAO INTEGER,
  PRECO NUMERIC(18,2))
AS
DECLARE EDICAO_ANTERIOR INTEGER;
DECLARE PRECO_ANTERIOR NUMERIC(18,2);
BEGIN
  FOR SELECT DISTINCT P.CODIGOF_PRODUTO, P.NOME_PRODUTO, E.CODIGOF_EDICAO, 
E.PRECO
      FROM NOTA_PONTO_ITEM I
      JOIN NOTA_PONTO N ON N.ID_NOTA_PONTO = I.ID_NOTA_PONTO
      JOIN EDICAO E ON E.ID_EDICAO = I.ID_EDICAO
      JOIN PRODUTO P ON P.ID_PRODUTO = E.ID_PRODUTO
      WHERE N.CODIGO_NOTA_PONTO = 1680
      ORDER BY P.NOME_PRODUTO
      INTO CODIGOF_PRODUTO, NOME_PRODUTO, CODIGOF_EDICAO, PRECO DO
  BEGIN
    EDICAO_ANTERIOR = CODIGOF_EDICAO - 1;
    PRECO_ANTERIOR = 0;
    SELECT E.PRECO
    FROM EDICAO E
    JOIN PRODUTO P ON P.ID_PRODUTO = E.ID_PRODUTO
    WHERE P.CODIGOF_PRODUTO = :CODIGOF_PRODUTO AND
          E.CODIGOF_EDICAO = :EDICAO_ANTERIOR
    INTO PRECO_ANTERIOR;
    IF ((PRECO_ANTERIOR > 0) AND (PRECO <> PRECO_ANTERIOR)) THEN
      SUSPEND;
  END
END 






Mais detalhes sobre a lista de discussão lista