Procedure Oracle com count(*)
Bom dia.
Onde esta o erro nesta procedure?
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
Curtidas 0
Melhor post
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
08/10/2014
Um Exemplo simples:
select cliente, count(*) from Pedido t group by cliente order by 2 desc
GOSTEI 0
Marisiana Battistella
08/10/2014
Não utilize 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 count(*)
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
08/10/2014
Obrigado pelas respostas, mas ainda continua com erro.
ocorre o seguinte erro:
linha 8 PLS-00428: é esperada uma cláusula INTO nesta instrução SELECT.
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
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:
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
08/10/2014
MARISIANA... deu certo, tive que criar o cursor mesmo por retornar várias linhas.
Funcionou perfeitamente.
Muito Obrigado.
Funcionou perfeitamente.
Muito Obrigado.
GOSTEI 0
Marisiana Battistella
08/10/2014
Certo!! Por nada!
GOSTEI 0
Marisiana Battistella
08/10/2014
desconsiderem esse comentário...
GOSTEI 0