Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problema com Stored Procedure


Ruy Salles

Pergunta

Estou migrando minhas bases de dados de Firebird para MySql, porém, ao executar uma Store Procedure que retorna mais de uma linha, só visualizo de forma transversal no HeidSql, ou seja, em abas separadas ao invés de fica um registro sobre o outro. Abaixo seque o script;

 

delimiter $$
drop procedure if exists teste;
create procedure teste()
begin
  DECLARE done INT DEFAULT false;
  DECLARE p_nomFornecedor varchar(200);
  DECLARE p_desApelidoFantasia varchar(200);

  DECLARE cur_emp CURSOR FOR select nomFornecedor, desApelidoFantasia
                                                           from fornecedor order by nomFornecedor;
 
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
 
    OPEN cur_emp;
 
    read_loop: LOOP

        FETCH cur_emp INTO p_nomFornecedor, p_desApelidoFantasia;

        IF done THEN
            LEAVE read_loop;
        END IF;

        SELECT p_nomFornecedor, p_desApelidoFantasia;
        
    END LOOP;      
    
     CLOSE cur_emp;
end;
$$

Grato a quem possa ajudar.

 

 

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde!

Na linha

 SELECT p_nomFornecedor, p_desApelidoFantasia; 
 você está retornando um set de informação para cada iteração do cursor.

Qual o objetivo desta procedure? Bastaria retornar um select da tabela com os campos que você quer, sem a necessidade do uso do cursor.

Link para o comentário
Compartilhar em outros sites

  • 0
5 horas atrás, Denis Courcy disse:
5 horas atrás, Denis Courcy disse:

Boa tarde!

Na linha



 SELECT p_nomFornecedor, p_desApelidoFantasia; 


 você está retornando um set de informação para cada iteração do cursor.

Qual o objetivo desta procedure? Bastaria retornar um select da tabela com os campos que você quer, sem a necessidade do uso do cursor.

Obrigado pela sua resposta, mas ao executar um procedure com um select na tabela, apresenta o seguinte erro:

Preciso retornar via stored procedure a relação de fornecedores cadastrados no sistema, mas estou fazendo no banco de desenvolvimento.

Error 1772 - O resultado consistiu em mais de uma linha, por esta razão estava usando o cursor.

Não entendi quando você cita: "você está retornando um set de informação para cada iteração do cursor.". Como posso corrigir?  

 

5 horas atrás, Denis Courcy disse:

 

Boa tarde!

Na linha


 SELECT p_nomFornecedor, p_desApelidoFantasia; 

 você está retornando um set de informação para cada iteração do cursor.

Qual o objetivo desta procedure? Bastaria retornar um select da tabela com os campos que você quer, sem a necessidade do uso do cursor.

 

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Ruy Salles disse:

Não entendi quando você cita: "você está retornando um set de informação para cada iteração do cursor.". Como posso corrigir?

O que eu quis dizer foi que a cada iteração do laço loop ele emite um resultset (set de informação) como resposta através do select

SELECT p_nomFornecedor, p_desApelidoFantasia; 

Criei o seguinte  teste em minha base de teste

CREATE TABLE fornecedor(
nomFornecedor VARCHAR(50), 
desApelidoFantasia VARCHAR(50)
)ENGINE=INNODB;
               
INSERT INTO fornecedor
VALUES ("teste a", "teste aa"),
("teste b", "teste bb"),
("teste c", "teste cc");

Criei a procedure

 DELIMITER $$

	-- drop procedure if exists teste;

	CREATE PROCEDURE teste()

	BEGIN

	  SELECT nomFornecedor, desApelidoFantasia FROM fornecedor;

	END;

	$$ 

 

Executei o teste

 CALL teste; 

 

Obtive o resultado:

 

teste.png

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...