Fórum Procedure Oracle com count(*) #497072

08/10/2014

0

Bom dia.
Onde esta o erro nesta procedure?

create or replace procedure p_emp_marca
(pdata_inicial in date,
pdata_final in date,
pVarejo in varchar,
pVenda_direta in varchar)
as
begin
select  fabricante, count(*)
from emplacamento
where data >= pdata_inicial
and data <= pdata_final
and venda_vajejo_ou_direta in (pVarejo,pVenda_direta)
group by fabricante
order by count(*) desc;
end p_emp_marca;
Ederson Luiz

Ederson Luiz

Responder

Post mais votado

14/10/2014

Se for utilizar um cursor, vc pode fazer assim:

create or replace procedure p_emp_marca (pdata_inicial           in date,
                                            pdata_final             in date,
                                            pVarejo                  in varchar,
                                            pVenda_direta       in varchar,
                                            t_refcursor             out SYS_REFCURSOR) as
begin
   open t_refcursor for
       select  em.fabricante, 
                 count(em.fabricante) as qtd_emplacamentos
       from emplacamento em
       where em.data >= pdata_inicial
       and em.data <= pdata_final
       and em.venda_vajejo_ou_direta in (pVarejo,pVenda_direta)
       group by em.fabricante;

end p_emp_marca;

Marisiana Battistella

Marisiana Battistella
Responder

Gostei + 1

Mais Posts

13/10/2014

Lourival Queiroz

Um Exemplo simples:


select cliente, count(*)
  from Pedido t
 group by cliente
 order by 2 desc

Responder

Gostei + 0

14/10/2014

Marisiana Battistella

Não utilize
select count(*)
informe qual é o nome da coluna que deverá ser utilizada na contagem.
Utilize aliás (apelidos) para as tabelas que estão sendo utilizadas, exemplo:
select  em.fabricante, 
                     count(em.idemplacamento) as qtd_emplacamentos
from emplacamento em
where em.data >= pdata_inicial
and em.data <= pdata_final
and em.venda_vajejo_ou_direta in (pVarejo,pVenda_direta)
group by em.fabricante
order by 2 desc; 
Responder

Gostei + 0

14/10/2014

Ederson Luiz

Obrigado pelas respostas, mas ainda continua com erro.

create or replace procedure p_emp_marca
(pdata_inicial in date,
pdata_final in date,
pVarejo in varchar,
pVenda_direta in varchar)
as
begin
select  em.fabricante, 
                     count(em.fabricante) as qtd_emplacamentos
from emplacamento em
where em.data >= pdata_inicial
and em.data <= pdata_final
and em.venda_vajejo_ou_direta in (pVarejo,pVenda_direta)
group by em.fabricante
;
end p_emp_marca;


ocorre o seguinte erro:

linha 8 PLS-00428: é esperada uma cláusula INTO nesta instrução SELECT.
Responder

Gostei + 0

14/10/2014

Marisiana Battistella

Ele está dizendo que você não definiu um método para obter o retorno no SQL...

Se esse SQL retorna mais de uma linha você terá que utilizar um cursor.
Senão vc pode criar duas variáveis que irão receber os dados retornados, como no exemplo:
create or replace procedure p_emp_marca (pdata_inicial           in date,
                                            pdata_final             in date,
                                            pVarejo                  in varchar,
                                            pVenda_direta       in varchar,
                                            v_fabricante           out varchar,
                                            v_emplacamentos  out numeric) as
begin

      select  em.fabricante, 
                 count(em.fabricante) as qtd_emplacamentos
      into v_fabricante,
             v_emplacamentos
      from emplacamento em
      where em.data >= pdata_inicial
      and em.data <= pdata_final
      and em.venda_vajejo_ou_direta in (pVarejo,pVenda_direta)
      group by em.fabricante;

end p_emp_marca;
Responder

Gostei + 0

14/10/2014

Ederson Luiz

MARISIANA... deu certo, tive que criar o cursor mesmo por retornar várias linhas.
Funcionou perfeitamente.

Muito Obrigado.
Responder

Gostei + 0

14/10/2014

Marisiana Battistella

Certo!! Por nada!
Responder

Gostei + 0

15/10/2014

Marisiana Battistella

desconsiderem esse comentário...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar