1
resposta

Procedure

Srs, boa noite!

Eu tenho que percorrer dados de uma tabela e executar uma procedure. Pelas pesquisas que eu fiz não é possível executar select e procedures. Eu tentei executar via function mas functions não funcionam com prepare statement.

É possível percorrer dados sem o uso de um select? Se alguém souber ou puder dar uma ideia eu agradeço.

CREATE PROCEDURE pr_retorna_cep(cep varchar(9), estado varchar(2))
  BEGIN 
  set @tabela = concat('igsis_cep_', lower(estado));
  set @aspas = '''';

  set @myQuery =  concat('SELECT cep FROM ', @tabela, ' WHERE cep = ', @aspas,cep,@aspas); 
  PREPARE stmt FROM @myQuery;
  EXECUTE stmt;      

  END//
DELIMITER ;
1 resposta

A unica forma de recuperar valores de uma tabela em mysql é fazendo uma consulta(Select) mas o que você fará com o resultado ai é com você.

E sim é possível fazer select em procedure e function. Mas para varrer um resultado de um select você precisa declarar um cursor que recebe o resultado o select, depois disso voce intera o cursor.

Veja o exemplo: DELIMITER $ CREATE PROCEDURE arredondamento_nota() BEGIN

O DECLARE serve para declarar uma variável que será utilizada durante o programa

DECLARE nota_atual NUMERIC(15,2); DECLARE id_aluno, id_prova INT;

Criamos um CURSOR que irá “guardar” o resultado do SELECT

DECLARE cur CURSOR FOR SELECT valor_nota, aluno_id, prova_id FROM nota;

Abrimos o CURSOR para utilizá-lo dentro do LOOP

OPEN cur;

Inicamos o LOOP dando um nome ao mesmo para que este possa ser referenciado caso #necessário

myloop: LOOP

Atribuímos o valor das colunas do cursor as variáveis que criamos anteriormente

FETCH cur INTO nota_atual, id_aluno, id_prova;

Lógica principal da nossa rotina.

Caso o próximo inteiro tenha um diferença de 0.2 ou menos da nota atual

então a nota atual será arredondada para este inteiro.

IF (CEIL(nota_atual) - nota_atual) <= 0.2 THEN UPDATE nota SET valor_nota = CEIL(nota_atual) WHERE aluno_id = id_aluno AND prova_id = id_prova; END IF;

END LOOP;

Fechamos o cursor

CLOSE cur; END

array10

Fonte: https://www.devmedia.com.br/stored-procedures-e-functions-no-mysql-com-phpmyadmin/30837