Usando variáveis ??como deslocamento em instruções SELECT dentro de funções mysql armazenados

StackOverflow https://stackoverflow.com/questions/300697

  •  08-07-2019
  •  | 
  •  

Pergunta

Eu sou muito novo para assunto de escrita função armazenada em banco de dados mySQL, portanto, não tenho certeza se o que eu estou tentando fazer aqui é possível a todos.

Eu preciso de uma função que irá retornar uma coluna da linha aleatória de uma tabela. Eu não quero usar o método ORDER BY RAND () para fazer isso, em vez eu faria isso como este:

DECLARE MAX_COUNT INT DEFAULT 120000;
DECLARE rand_offset INT;
DECLARE str_rnd_word VARCHAR(255);
SET rand_offset = FLOOR((RAND() * MAX_COUNT));

SELECT word INTO str_rnd_word FROM all_words LIMIT 1 OFFSET rand_offset ;

RETURN str_rnd_word;

MySQL gera um erro ao criar a função com o corpo assim. Mas quando eu usar o número codificado como OFFSET ele funciona muito bem.

Alguém pode lançar alguma luz sobre o assunto, por favor.

Estou executando o MySQL 5.0.45 no Windows caixa.

Graças

Foi útil?

Solução

No MySQL antes de 5.5, você não pode colocar uma variável na cláusula LIMIT em procedimentos MySQL armazenados. Você tem que interpolar lo em uma corda e em seguida, executar a seqüência de caracteres como uma consulta dinâmica.

SET rand_offset = FLOOR(RAND() * (SELECT COUNT(*) FROM all_words));
SET @sql = CONCAT('SELECT word INTO str_rnd_word FROM all_words LIMIT 1 OFFSET ', rand_offset);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top