Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wallcrawler

MySQL Function

Recommended Posts

Olá,

 

Galera estou necessitando criar uma função mysql que ao passar um parâmetro, busque na tabela rh os nomes dos corretores que estão ligados a precaptação de um imóvel.

 

A query seria algo assim:

select b.nome_razao from financeiro_imob.pre_captacao_corretores a inner join financeiro_imob.rh b on a.cnpj_cpf_rh = b.cnpj_cpf_rh where a.id_precaptacao = id;

A query acima deverá me retornar pelo menos 1 tupla, mas como tb podem ser n tuplas.

 

Até agora, lendo a documentação do mysql cheguei a esse script:

 


delimiter//

drop function if exists CorretoresPreCaptacao//

create function CorretoresPreCaptacao(id int) returns text
begin

    declare done int default 0;
    declare a text;
    declare temp varchar(200);
    declare rs cursor for select b.nome_razao from financeiro_imob.pre_captacao_corretores a inner join financeiro_imob.rh b on a.cnpj_cpf_rh = b.cnpj_cpf_rh where a.id_precaptacao = id;
    declare continue handler for not found set done = 1;
    set a = "";
   
    open rs;

    fetch rs into temp;

    while not done do
    begin
     set a := a & ', ' & temp;

    fetch rs into temp;
    end;
    end while;
   
    close rs;
return a;

end//
delimiter ;

E na query uso:

 

CorretoresPreCaptacao(id_precaptacao)

Usando o "return a;" acima o resultado da consulta me retorna nulo, mas se eu puser "return temp;" ele me retorna o último nome da pesquisa, obviamente pois o fetch associa o resultado do ponteiro a "temp" a cada while.

 

O que eu gostaria de saber é como usar uma variável para concatenar cada nome, vindo da variável "temp" separado por vírgulas?

 

A criação da function não dá erro, pois a sintaxe está correta. Apenas creio que seja um problema de semântica.

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

i aew Wallcrawler, bom tenta colocar o "fetch rs into temp;" dentro do while.

espero que ajude abraço!

 

Não deu certo romerito, obrigado.

 

Mas acabei descobrindo como resolver.

 

o código ficou assim:

 

DELIMITER $$

DROP FUNCTION IF EXISTS `CorretoresPreCaptacao` $$
CREATE DEFINER=`sqlfinanceiro`@`%` FUNCTION `CorretoresPreCaptacao`(id int) RETURNS varchar(1000) CHARSET latin1
begin

	declare done int default 0;
	declare a varchar(1000);
	declare temp varchar(200);
	declare rs cursor for select b.nome_razao from financeiro_imob.pre_captacao_corretores a inner join financeiro_imob.rh b on a.cnpj_cpf_rh = b.cnpj_cpf_rh where a.id_precaptacao = id;
	declare continue handler for not found set done = 1;

  set a = "";

  open rs;

	repeat
	begin
  fetch rs into temp;

      if done = 0 and a <> "" then
        set a = concat(a, ', ');
      end if;

	   set a = concat(a, temp);

     set temp = "";



	end;
	UNTIL done END REPEAT;

	close rs;
return a;

end $$

DELIMITER ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.