Могу ли я запустить цикл в 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 (пользовательская функция).