CREATE PROCEDURE p ()
LANGUAGE SQL
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT 'A Procedure' <--
SELECT CURRENT_DATE, RAND() FROM t
В данном случае мы создали процедуру с именем p, которая возвращает текущую дату и
псевдослучайное число из таблицы t. Пример ее вызова и возвращаемого результата:
mysql> call p2()
+--------------+-----------------+
| CURRENT_DATE | RAND() |
+--------------+-----------------+
| 2005-06-27 | 0.7822275075896 |
+--------------+-----------------+
1 row in set (0.26 sec)
Query OK, 0 rows affected (0.26 sec)
Чуть более сложный пример создания и использования функции:
CREATE FUNCTION factorial (n DECIMAL(3,0))
RETURNS DECIMAL(20,0)
DETERMINISTIC
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
52
|