procedure group by não funciona
Caros amigos não sei o que acontece com esse procedimento não consigo usar group by
aparece o seguinte erro :
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
if (:i_tipo = ´TESTE´) then
begin
FOR
SELECT
v.ven_num_nota,
v.ven_data_hora_venda,
det.vd_codigo_produto,
prod.pro_codigo,
mod.mod_descricao,
sum(det.vd_quantidade),
sum(det.vd_valor_uni),
sum(det.vd_valor_total)
FROM
VENDAS v
left join
vendas_detalhes det on (det.vd_codigo_venda = v.ven_codigo)
inner join
produto prod on (prod.pro_codigo = det.vd_codigo_produto)
inner join
modelo mod on (mod.mod_codigo = prod.pro_cod_modelo and mod.mod_grupo = 3)
WHERE
v.ven_empresa = :i_empresa and
v.ven_data_hora_venda between :i_data_inicial and :i_data_final
group by v.ven_codigo
INTO
:r_num_nota,
:r_data_hora,
:r_cod_prod,
:r_cod_prod1,
:r_des_mod,
:r_quantidade,
:r_valor_c,
:r_valor_v
DO
SUSPEND;
end
aparece o seguinte erro :
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
if (:i_tipo = ´TESTE´) then
begin
FOR
SELECT
v.ven_num_nota,
v.ven_data_hora_venda,
det.vd_codigo_produto,
prod.pro_codigo,
mod.mod_descricao,
sum(det.vd_quantidade),
sum(det.vd_valor_uni),
sum(det.vd_valor_total)
FROM
VENDAS v
left join
vendas_detalhes det on (det.vd_codigo_venda = v.ven_codigo)
inner join
produto prod on (prod.pro_codigo = det.vd_codigo_produto)
inner join
modelo mod on (mod.mod_codigo = prod.pro_cod_modelo and mod.mod_grupo = 3)
WHERE
v.ven_empresa = :i_empresa and
v.ven_data_hora_venda between :i_data_inicial and :i_data_final
group by v.ven_codigo
INTO
:r_num_nota,
:r_data_hora,
:r_cod_prod,
:r_cod_prod1,
:r_des_mod,
:r_quantidade,
:r_valor_c,
:r_valor_v
DO
SUSPEND;
end
Uiliangurjon
Curtidas 0
Respostas
Camilo
17/04/2006
tenho essa funcionando, tem o group by, o q vi de diferente foi as, antes do begin, o erro quando eu naum estava conseguindo e q eu tava usando apenas select como se fosse no editor de sql normal, mais na SP soh funcionou com for select, como está no seu tb, mais o + acho q tá certo, nosso amigo emersonen vendo ae ele vai colocar pra funcionar, mais veva o as antes do begin....
SET TERM ^ ;
CREATE PROCEDURE P_GRAF_HIST_CAIXA (
VDATA_INICIO DATE,
VDATA_FINAL DATE)
RETURNS (
ID_HISTORICO INTEGER,
VALOR NUMERIC(18,2))
AS
BEGIN
for select
id_historico, sum(valor)
from
caixa
group by id_historico
into
:id_historico,
:Valor do
suspend;
end^
SET TERM ; ^
GRANT SELECT ON CAIXA TO PROCEDURE P_GRAF_HIST_CAIXA;
GRANT EXECUTE ON PROCEDURE P_GRAF_HIST_CAIXA TO SYSDBA;
SET TERM ^ ;
CREATE PROCEDURE P_GRAF_HIST_CAIXA (
VDATA_INICIO DATE,
VDATA_FINAL DATE)
RETURNS (
ID_HISTORICO INTEGER,
VALOR NUMERIC(18,2))
AS
BEGIN
for select
id_historico, sum(valor)
from
caixa
group by id_historico
into
:id_historico,
:Valor do
suspend;
end^
SET TERM ; ^
GRANT SELECT ON CAIXA TO PROCEDURE P_GRAF_HIST_CAIXA;
GRANT EXECUTE ON PROCEDURE P_GRAF_HIST_CAIXA TO SYSDBA;
GOSTEI 0