[firebase-br] Execute Block

Paulo Geloramo paulogeloramo em terra.com.br
Ter Jun 19 19:45:32 -03 2012


EXECUTE BLOCK funciona bem no IBExpert, mas com os componentes
do Delphi 2010 tem problemas com o : (dois pontos) antes das variáveis
para diferenciar de campo da tabela.

Alguma sugestão para usar Execute Block com os componentes do Delphi?

Exemplo:

EXECUTE BLOCK (
  P_ID_FORNECEDOR INTEGER = :P_ID_FORNECEDOR,
  P_ID_NOTA_PONTO INTEGER = :P_ID_NOTA_PONTO)
RETURNS(
  R_ID_PONTO INTEGER,
  R_CODIGO_PONTO INTEGER,
  R_BOX INTEGER,
  R_CODIGOF_PRODUTO INTEGER,
  R_ID_EDICAO INTEGER,
  R_CODIGOF_EDICAO INTEGER,
  R_PRECO NUMERIC(18,2),
  R_QUANTIDADE INTEGER)
AS
BEGIN
  FOR SELECT DISTINCT P.CODIGOF_PRODUTO, E.ID_EDICAO, E.CODIGOF_EDICAO,
E.PRECO
      FROM NOTA_PONTO_ITEM I
      JOIN EDICAO E ON (E.ID_EDICAO = I.ID_EDICAO)
      JOIN PRODUTO P ON (P.ID_PRODUTO = E.ID_PRODUTO)
      WHERE I.QUANTIDADE > 0 AND P.ID_FORNECEDOR = :P_ID_FORNECEDOR AND
I.ID_NOTA_PONTO = :P_ID_NOTA_PONTO
      INTO R_CODIGOF_PRODUTO, R_ID_EDICAO, R_CODIGOF_EDICAO, R_PRECO DO
  BEGIN
    FOR SELECT T.ID_PONTO, T.CODIGO_PONTO, T.BOX
        FROM PONTO T
        INTO R_ID_PONTO, R_CODIGO_PONTO, R_BOX DO
    BEGIN
      R_QUANTIDADE = 0;

      SELECT I.QUANTIDADE
      FROM NOTA_PONTO_ITEM I
      WHERE I.QUANTIDADE > 0 AND I.ID_NOTA_PONTO = :P_ID_NOTA_PONTO AND
I.ID_EDICAO = :R_ID_EDICAO AND I.ID_PONTO = :R_ID_PONTO
      INTO R_QUANTIDADE;

      SUSPEND;
    END
  END
END






Mais detalhes sobre a lista de discussão lista