Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
BEGIN
DECLARE factorial DECIMAL(20,0) DEFAULT 1;
DECLARE counter DECIMAL(3,0);
SET counter = n;
factorial_loop: REPEAT
SET factorial = factorial * counter;
SET counter = counter - 1;
UNTIL counter = 1
END REPEAT;
RETURN factorial;
END
В приложении:
INSERT INTO t VALUES (factorial(pi))
SELECT s1, factorial (s1) FROM t
UPDATE t SET s1 = factorial(s1)
WHERE factorial(s1) < 5
Разумеется эфективность применения хранимых пороцедур существенно возрастает при вызове их с параметрами (аргументами). Ниже дан пример процедуры с обработкой переданых ей параметров:
CREATE PROCEDURE p1 (IN parameter1 INT)
BEGIN
DECLARE variable1 INT;
SET variable1 = parameter1 + 1;
IF variable1 = 0 THEN
INSERT INTO t VALUES (17);
END IF;
IF parameter1 = 0 THEN
UPDATE t SET s1 = s1 + 1; <--
ELSE
UPDATE t SET s1 = s1 + 2;
END IF;
END;
Вызов процедуры теперь будет таким:
mysql> CALL p2(0) // Query OK, 2 rows affected (0.28 sec)
и в результате запроса мы получим:
mysql> SELECT * FROM t
+----+
| s1 |
+----+
| 6 |
| 6 |
+------+
2 rows in set (0.01 sec)
Кроме условных, возможны и любые циклические конструкции:
CREATE PROCEDURE p3 ()
BEGIN
DECLARE v INT;