MySQL Consulta com diversos registros

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 ;

Por que exatamente você precisa disso? E por que precisa que seja uma procedure?

Se você, dentro da procedure, simplesmente executar um select, sem fazer o o loop e o set nas variáveis (como explicado aqui), o resultado da procedure será um resultset, que você poderá iterar fora da procedure da forma que quiser.

Abraço.

Boa tarde!
Obrigado pela resposta.
Usarei esta SP no Delphi, acessando via ZEOS.
Primeiramente fiz como voce sugeriu mas na aplicação ocorre um erro. Pesquisando sobre o erro descobri que a SP deveria usar cursor.

Alguma dica?

Mas ainda não entendi por que você precisa que seja uma procedure, sendo que um select normal já resolveria. Salvo engano, no Zeos, você tem componentes de Query, que permitem digitar o SQL diretamente e retornam coleções de registros, onde você pode iterar e pegar os valores direto no componente. Não precisa de SP no banco.

Abraço.