باستخدام المتغيرات كما أوفست في عبارات SELECT داخل ظائف الخلية المخزنة

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

  •  08-07-2019
  •  | 
  •  

سؤال

وأنا جديدة تماما لموضوع ريتينغ ظيفة تخزينها لقاعدة بيانات الخلية، وبالتالي لست متأكدا إذا ما أحاول القيام به هنا من الممكن على الإطلاق.

وأحتاج إلى وظيفة التي سيعود عمود من الصف عشوائي من جدول. أنا لا أريد أن استخدام ORDER BY 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;

والخلية يلقي خطأ على خلق وظيفة مع هيئة من هذا القبيل. ولكن عندما استخدم رقم الثابت تلوينها كما إزاحة يعمل على ما يرام.

ويمكن للشخص أن يلقي بعض الضوء على هذا الموضوع من فضلك.

وأنا على التوالي الخلية 5.0.45 في مربع النوافذ.

والشكر

هل كانت مفيدة؟

المحلول

في الخلية قبل 5.5، لا يمكنك وضع متغير في بند LIMIT في إجراءات الخلية المخزنة. عليك أن أقحم قبل أن تتحول إلى سلسلة ثم تنفيذ سلسلة ك استعلام الحيوية.

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