Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Problema com Stored Procedure


Ruy Salles
 Share

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...