Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

FUNCAO NO MYSQL - ETL

Boa tarde,

Preciso criar uma função que tenha os mesmos comportamentos das funções abaixo, no mySQL. Minha dúvida é qual meu tipo de variável no mySQL semelhante ao 'RECORD' e se minha função no mySQL tem o 'RETURNS VOID' ou semelhante a ele, ou seja, não é necessário nenhum retorno:

CREATE OR REPLACE FUNCTION minha_funcao()
RETURNS VOID AS 
$$
DECLARE

BEGIN
    executable_statement
END;
$$ LANGUAGE plpgsql
CREATE OR REPLACE FUNCTION minha_outra_funcao()
RETURNS VOID AS $$
DECLARE
variavel_de_registros RECORD;
BEGIN

    FOR variavel_de_registros IN
        SELECT campos FROM tabela_a_ser_migrada
    LOOP
        PERFORM minha_funcao();
    END LOOP;
RETURN;
END
$$ LANGUAGE plpgsql
1 resposta
solução!

Olá Anna, tudo bem?

Peço desculpas pela demora no retorno.

Infelizmente não existe uma variável no MySQL semelhante ao RECORD, ou semelhante ao ROWTYPE, que tem uma funcionalidade bem parecida com a RECORD no PostgreSQL:

RECORD:

  • Um espaço reservado que pode conter uma única linha de um conjunto de resultados.
  • Não possui uma estrutura pré definida como uma variável de linha. Sua estrutura é determinada quando você atribui uma linha a ela.

ROWTYPE:

  • Armazena toda a linha de um conjunto de resultados retornado pela instrução select into.

No MySQL é necessário declarar uma variável para cada coluna que será retornada.

  • Um exemplo bem simples de como criar uma função no MySQL:
DELIMITER $$

CREATE FUNCTION f_numero_aleatorio(min INT, max INT) RETURNS int(11)
BEGIN
   DECLARE vRetorno INT;
   SELECT  FLOOR((RAND() * (max-min+1)) + min) INTO vRetorno;
RETURN vRetorno;
END$$

DELIMITER ;
  • Para chamar uma procedure utilizamos a instrução SELECT
SELECT f_numero_aleatorio(1, 10);

Utilizando funções  no mysql


No MySQL também não existe um tipo de retorno como VOID, pois existe um outro tipo de rotina que não é necessário ter um retorno, às PROCEDURES.

Existe algumas diferenças entre Procedures e Functions:

  • Functions retornam valores ;
  • Procedures podem ou não retornar um valor.
  • Functions podem ser usadas em uma instrução SELECT;
  • Procedures não podem ser usados em uma instrução SELECT.
  • Functions podem ter apenas parâmetros de entrada;
  • Procedures podem ter parâmetros de entrada / saída.
  • Functions podem ser chamadas de dentro de Procedures ;
  • Procedures não podem ser chamados a partir de functions.
  • Um exemplo bem simples de como criar uma procedure no MySQL:
DELIMITER $$

CREATE PROCEDURE `alo_mundo` ()
BEGIN
select 'Alô Mundo !!!!';
END$$

DELIMITER ;
  • Para chamar uma procedure utilizamos a instrução CALL
CALL alo_mundo;

Utilizando procedures no mysql

Para te ajudar ainda mais sobre este assunto, vou deixar aqui para você a o link da documentação do MySQL, onde é abordado sobre este assunto e pode ajudar no que você deseja.

Espero ter ajudado, qualquer dúvida é só falar e bons estudos!