Могу ли я запустить цикл в MySQL без использования процедуры/функции?
Для тестирования можно ли запустить цикл из workbench MySQL или аналогичного инструмента? Я попытался, но получил ошибку.
Если это возможно, поставьте простой пример, который я могу запустить.
Ответы
Ответ 1
Вы не можете сделать цикл for в редакторе SQL без хранимой процедуры. Я использую TOAD для MySQL.
Быстрая хранимая процедура должна выполнять следующее задание:
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_loop_test$$
CREATE PROCEDURE proc_loop_test()
BEGIN
DECLARE int_val INT DEFAULT 0;
test_loop : LOOP
IF (int_val = 10) THEN
LEAVE test_loop;
END IF;
SET int_val = int_val +1;
SELECT int_val;
END LOOP;
END$$
DELIMITER ;
Ответ 2
Там трюк с ограниченными прецедентами, которые являются "петлеобразными".
Я хотел создать большую (1 ~ 2 миллиона) таблицу строк случайных целых чисел для теста:
INSERT INTO test_table (num) VALUES(ROUND(RAND() * 1E6));
-- calling this will insert once for every row in test_table
INSERT INTO test_table (num)
SELECT ROUND(RAND() * 1E6)
FROM test_table;
Итак, я быстро просто удвоил количество строк, пока не получил то, что мне нужно.
Ответ 3
Если вы хотите заблокировать текущий поток, используйте select sleep(seconds);
, иначе вы можете использовать хранимую процедуру (если есть что-то, что вы хотите перебрать) или UDF (пользовательская функция).