Procedure Oracle com count(*)

Oracle

08/10/2014

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

Curtidas 0

Melhor post

Marisiana Battistella

Marisiana Battistella

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;
GOSTEI 1

Mais Respostas

Lourival Queiroz

Lourival Queiroz

08/10/2014

Um Exemplo simples:


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

GOSTEI 0
Marisiana Battistella

Marisiana Battistella

08/10/2014

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; 
GOSTEI 0
Ederson Luiz

Ederson Luiz

08/10/2014

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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

08/10/2014

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;
GOSTEI 0
Ederson Luiz

Ederson Luiz

08/10/2014

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

Muito Obrigado.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

08/10/2014

Certo!! Por nada!
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

08/10/2014

desconsiderem esse comentário...
GOSTEI 0
POSTAR