DELIMITER $$
CREATE PROCEDURE GenerateRangeDates(IN dateStart DATE, IN dateEnd DATE)
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS dates (day DATE);
loopDate: LOOP
INSERT INTO dates(day) VALUES (dateStart);
SET dateStart = DATE_ADD(dateStart, INTERVAL 1 DAY);
IF dateStart <= dateEnd
THEN ITERATE loopDate;
ELSE LEAVE loopDate;
END IF;
END LOOP loopDate;
SELECT day FROM dates;
DROP TEMPORARY TABLE IF EXISTS dates;
END
$$
-- Call procedure
call GenerateRangeDates(
now() - INTERVAL 40 DAY,
now()
);
exec
не является выражением: оператором в Python 2.x и функцией в Python 3.x. Он компилирует и немедленно оценивает оператор или набор операторов, содержащихся в строке. Пример:
exec ('print (5)') # выводит 5.
# exec 'print 5', если вы используете Python 2.x, ни exec, ни print там не являются функцией {{1 }} exec ('print (5) \ nprint (6)') # выводит 5 {новая строка} 6.
exec ('if True: print (6)') # выводит 6.
exec ('5') # ничего не делает и ничего не возвращает.
eval
- встроенная функция ( не оператор), которая оценивает выражение и возвращает значение, которое производит выражение. Пример:
x = eval ('5') # x <- 5
x = eval ('% d + 6'% x) # x <- 11
x = eval ( 'abs (% d)'% -100) # x <- 100
x = eval ('x = 5') # INVALID; присвоение не является выражением.
x = eval ('if 1: x = 4') # INVALID; if - это инструкция, а не выражение.
compile
- это версия нижнего уровня exec
и eval
. Он не выполняет и не оценивает ваши операторы или выражения, но возвращает объект кода, который может это сделать. Доступны следующие режимы:
compile (string, '', 'eval')
возвращает объект кода, который был бы выполнен, если бы вы выполнили eval (string)
. Обратите внимание, что вы не можете использовать операторы в этом режиме; только одно (одно) выражение действительно. compile (string, '', 'exec')
возвращает объект кода, который был бы выполнен, если бы вы выполнили exec (string)
. Здесь вы можете использовать любое количество утверждений. compile (string, '', 'single')
похож на режим exec
, но игнорирует все, кроме первого оператора. Обратите внимание, что оператор if
/ else
с его результатами считается одним оператором.