Как создать динамический запрос SQL в процедуре? - MySQL
Формулировка задачи:
Объясните пожалуйста мне как создать подобный запрос? Перечитал кучу статей, везде написано по разному.
Исправьте ошибки и допишите пожалуйста как должно быть, если не сложно, а я пойму дальше:
Думаю суть ясна, что я хочу сделать с переменной 'catId'. И еще пару вопросов:
1. Верно я понимаю, что подобное возможно только в процедурах?
2. Как в процедуре вернуть ответ?
Листинг программы
- DELIMITER //
- CREATE PROCEDURE getRandItem (catId INT)
- -- RETURNS int(11)
- BEGIN
- DECLARE itemId INT(11);
- DECLARE @sqlstr VARCHAR(100);
- SET @sqlstr = 'SELECT id FROM items WHERE counter_cat_' + catId + '>0 ORDER BY RAND() LIMIT 1';
- -- RETURN result;
- END; //
- DELIMITER ;
Решение задачи: «Как создать динамический запрос SQL в процедуре?»
textual
Листинг программы
- -- catId - это входящий параметр
- SET @itemId = NULL;
- SET @sql_str = CONCAT('SELECT id INTO @itemId FROM items WHERE counter_cat_', catId, '>0 ORDER BY RAND() LIMIT 1 FOR UPDATE');
- PREPARE sql_ FROM @sql_str;
- EXECUTE sql_;
- IF @itemId IS NULL
- THEN
- SET @itemId = 'результат не найден';
- END IF;
- SELECT @itemId;
Объяснение кода листинга программы
SET @itemId = NULL;
— инициализирует переменную@itemId
значением NULL;SET @sql_str = CONCAT('SELECT id INTO @itemId FROM items WHERE counter_cat_', catId, '>0 ORDER BY RAND() LIMIT 1 FOR UPDATE');
— создает динамический SQL запрос, используя функцию CONCAT(), для объединения строки с именем таблицы, именем столбца и значением параметраcatId
в переменную@sql_str
;PREPARE sql_ FROM @sql_str;
— подготавливает запрос из переменной@sql_str
в объект типаPREPARE
;EXECUTE sql_;
— выполняет запрос, подготовленный в предыдущем шаге;IF @itemId IS NULL
— проверяет, является ли значение переменной@itemId
равным NULL;THEN
— если условие в предыдущем шаге истинно, переходит к следующему шагу;SET @itemId = 'результат не найден';
— устанавливает значение переменной@itemId
равным строкерезультат не найден
, если условие в предыдущем шаге истинно;END IF;
— завершает проверку условия в предыдущем шаге;SELECT @itemId;
— выбирает значение переменной@itemId
для вывода в консоль.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д