MySQL의 저장된 함수 내부의 선택적 평가에서 변수를 오프셋으로 사용합니다.

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

  •  08-07-2019
  •  | 
  •  

문제

나는 MySQL 데이터베이스에 저장된 기능을 작성하는 주제에 아주 익숙하지 않으므로 여기서 내가하려는 일이 전혀 가능하지 않은지 확실하지 않습니다.

테이블에서 임의의 행에서 열을 반환하는 함수가 필요합니다. 나는 rand () 메소드의 순서를 사용하여 그렇게하고 싶지 않습니다. 오히려 다음과 같이 할 것입니다.

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은 그런 몸체로 기능을 만들 때 오류를 던집니다. 그러나 하드 코딩 번호를 오프셋으로 사용하면 잘 작동합니다.

누군가가 주제에 대해 약간의 빛을 비추도록 할 수 있습니까?

Windows 상자에서 MySQL 5.0.45를 실행하고 있습니다.

감사

도움이 되었습니까?

해결책

5.5 이전의 MySQL에서는 변수를 LIMIT MySQL 저장 절차의 조항. 문자열에 보간 한 다음 문자열을 동적 쿼리로 실행해야합니다.

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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top