Fórum erro na procedure (execute statement) #50247
02/04/2005
0
nao sei se essa procedure esta certa , mas me deem uma luz
BEGIN
FOR
SELECT PEDIDO.COD_REP as Codigo,
REP.NOME as Nome,
COUNT(PEDIDO.NUMERO) as QTDE_VENDA,
SUM(Pedido.Total) AS TOTAL,
SUM(Pedido.Valor_Desconto) Desconto,
sum(pedido.desconto_extra) Extra
FROM PEDIDO
INNER JOIN REP ON PEDIDO.COD_REP = REP.CODIGO
INNER JOIN TIPO_MOV ON PEDIDO.COD_TIPO_MOV = TIPO_MOV.CODIGO
WHERE
PEDIDO.DATA_FATURAMENTO BETWEEN :DATA_INI AND :DATA_FIM
and Pedido.Faturado = ´S´
and Pedido.Cancelado = ´N´
and Pedido.Cod_Loja = 1
GROUP BY PEDIDO.COD_REP,REP.NOME
ORDER BY 4 DESC
INTO :CODIGO,:NOME,:QTDE_VENDA,:TOTAL,:DESCONTO,:EXTRA DO
BEGIN
AQUI QUE ESTA O PROBLEMA, COMO FAÇO PARA COLOCAR ESSA CONDIÇÃO, PQ NAO SEI USAR execute statement PARA QUE QUANDO O USUARIO INFORMAR O CLIENTE ELE FILTRA POR CLIENTE, SE ELE NAO COLOCAR ELE PESQUISA TODOS
if ( :cliente <> 0 ) then
begin
vSQL = ´AND Pedido.Cod_Cliente = ´ || :cliente;
end
execute statement vSQL;
/* Condição */
SUSPEND;
END
END
BEGIN
FOR
SELECT PEDIDO.COD_REP as Codigo,
REP.NOME as Nome,
COUNT(PEDIDO.NUMERO) as QTDE_VENDA,
SUM(Pedido.Total) AS TOTAL,
SUM(Pedido.Valor_Desconto) Desconto,
sum(pedido.desconto_extra) Extra
FROM PEDIDO
INNER JOIN REP ON PEDIDO.COD_REP = REP.CODIGO
INNER JOIN TIPO_MOV ON PEDIDO.COD_TIPO_MOV = TIPO_MOV.CODIGO
WHERE
PEDIDO.DATA_FATURAMENTO BETWEEN :DATA_INI AND :DATA_FIM
and Pedido.Faturado = ´S´
and Pedido.Cancelado = ´N´
and Pedido.Cod_Loja = 1
GROUP BY PEDIDO.COD_REP,REP.NOME
ORDER BY 4 DESC
INTO :CODIGO,:NOME,:QTDE_VENDA,:TOTAL,:DESCONTO,:EXTRA DO
BEGIN
AQUI QUE ESTA O PROBLEMA, COMO FAÇO PARA COLOCAR ESSA CONDIÇÃO, PQ NAO SEI USAR execute statement PARA QUE QUANDO O USUARIO INFORMAR O CLIENTE ELE FILTRA POR CLIENTE, SE ELE NAO COLOCAR ELE PESQUISA TODOS
if ( :cliente <> 0 ) then
begin
vSQL = ´AND Pedido.Cod_Cliente = ´ || :cliente;
end
execute statement vSQL;
/* Condição */
SUSPEND;
END
END
Fernando
Curtir tópico
+ 0
Responder
Posts
02/04/2005
Afarias
se vc vai usar execute statement então, TODO o comando (select) tem q estar na sua variável vSQL, e não apenas uma parte, entende?!
uma outra solução para o q vc deseja (sem execute statement) seria:
T+
{...}
vSQL = ´select <<campos>> from etc...´;
if (cliente <> 0) then
vSQL = vSQL || ´ AND Pedido.Cod_Cliente = ´ || cast(cliente as varchar(x));
{...}uma outra solução para o q vc deseja (sem execute statement) seria:
select .... where ... and (:cliente = 0 or Pedido.Cod_Cliente = :cliente)
T+
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)