Preciso criar stored procedure em MySQL que possa retornar várias linhas de registro.
Criei o código abaixo, mas ele retorna apenas o último registro do banco, sendo que há 5 que atendem as especificações da cláusula where.
A instrução select foi testada no console do mySQL.
Segue o código:
DELIMITER $$
create procedure PESQUISA_PEDIDOS(in PCOD_VENDEDOR integer,
out R_ID integer,
out R_cod_empresa smallint,
out R_cod_cliente integer,
out R_dc char(1),
out R_nome_Clie varchar(50),
out R_telefone varchar(14),
out R_endereco varchar(50),
out R_numero varchar(10),
out R_complemento varchar(20),
out R_bairro varchar(30),
out R_cidade varchar(50),
out R_dt_cadastro Date,
out R_observacao varchar(300),
out R_situacao char(1),
out R_cpf_cnpj varchar(18),
out R_rg_ie varchar(18),
out R_transmissao timestamp,
out R_cod_prazo smallint,
out R_prazo varchar(30),
out R_cod_vendedor integer,
out R_perc_comissao double precision,
out R_perc_fiscal double precision,
out R_dt_entrega Date,
out R_T124CPO1 integer,
out R_TOTALPED double precision)
begin
declare v_ID integer;
declare v_cod_empresa smallint;
declare v_cod_cliente integer;
declare v_dc char(1);
declare v_nome_Clie varchar(50);
declare v_telefone varchar(14);
declare v_endereco varchar(50);
declare v_numero varchar(10);
declare v_complemento varchar(20);
declare v_bairro varchar(30);
declare v_cidade varchar(50);
declare v_dt_cadastro Date;
declare v_observacao varchar(300);
declare v_situacao char(1);
declare v_cpf_cnpj varchar(18);
declare v_rg_ie varchar(18);
declare v_transmissao timestamp;
declare v_cod_prazo smallint;
declare v_prazo varchar(30);
declare v_cod_vendedor integer;
declare v_perc_comissao double precision;
declare v_perc_fiscal double precision;
declare v_dt_entrega Date;
declare v_T124CPO1 integer;
declare v_TOTALPED double precision;
-- Definição da variável de fim do cursor_name
declare fim_pesquisa int default 0;
-- Definição do cursor_name
declare cursorSICAD cursor for
select PED.id, PED.cod_empresa, PED.cod_cliente, PED.dc, PED.nome_Clie,
PED.telefone, PED.endereco, PED.numero, PED.complemento, PED.bairro, PED.cidade,
PED.dt_cadastro, PED.observacao, PED.situacao, PED.cpf_cnpj, PED.rg_ie, PED.transmissao,
PED.cod_prazo, PED.prazo, PED.cod_vendedor, PED.perc_comissao, PED.perc_fiscal,
PED.dt_entrega, PED.T124CPO1, Sum(ITPED.quantidade*ITPED.prc_venda) as Total
from PEDIDOS PED
inner join IT_PEDIDOS ITPED on (PED.id = ITPED.id_pedido)
where ((PCOD_VENDEDOR = 0) or (PED.cod_vendedor = PCOD_VENDEDOR))
and ((PED.T124CPO1 = 0) or (PED.T124CPO1 is null))
group by PED.id, PED.cod_empresa, PED.cod_cliente, PED.dc, PED.nome_Clie,
PED.telefone, PED.endereco, PED.numero, PED.complemento, PED.bairro, PED.cidade,
PED.dt_cadastro, PED.observacao, PED.situacao, PED.cpf_cnpj, PED.rg_ie, PED.transmissao,
PED.cod_prazo, PED.prazo, PED.cod_vendedor, PED.perc_comissao, PED.perc_fiscal,
PED.dt_entrega, PED.T124CPO1;
-- Definição da variável de controle do loop
declare continue handler for not found set fim_pesquisa=1;
-- Abre o cursor_name
Open cursorSICAD;
-- Looping de execução do cursor
loopPesq: loop
Fetch cursorSICAD into v_ID, v_cod_empresa, v_cod_cliente, v_dc, v_nome_Clie, v_telefone,
v_endereco, v_numero, v_complemento, v_bairro, v_cidade, v_dt_cadastro,
v_observacao, v_situacao, v_cpf_cnpj, v_rg_ie, v_transmissao, v_cod_prazo,
v_prazo, v_cod_vendedor, v_perc_comissao, v_perc_fiscal, v_dt_entrega,
v_T124CPO1, v_TOTALPED;
-- Controle de existir mais registros na tabela
if fim_pesquisa = 1 then
leave loopPesq;
end if;
set R_ID = v_ID;
set R_cod_empresa = v_cod_empresa;
set R_cod_cliente = v_cod_cliente;
set R_dc = v_dc;
set R_nome_Clie = v_nome_Clie;
set R_telefone = v_telefone;
set R_endereco = v_endereco;
set R_numero = v_numero;
set R_complemento = v_complemento;
set R_bairro = v_bairro;
set R_cidade = v_cidade;
set R_dt_cadastro = v_dt_cadastro;
set R_observacao = v_observacao;
set R_situacao = v_situacao;
set R_cpf_cnpj = v_cpf_cnpj;
set R_rg_ie = v_rg_ie;
set R_transmissao = v_transmissao;
set R_cod_prazo = v_cod_prazo;
set R_prazo = v_prazo;
set R_cod_vendedor = v_cod_vendedor;
set R_perc_comissao = v_perc_comissao;
set R_perc_fiscal = v_perc_fiscal;
set R_dt_entrega = v_dt_entrega;
set R_T124CPO1 = v_T124CPO1;
set R_TOTALPED = v_TOTALPED;
end loop loopPesq;
close cursorSICAD;
end$$
DELIMITER ;