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;
SET v = 0;
WHILE v < 5 DO
INSERT INTO t VALUES (v);
SET v = v + 1;
END WHILE;
END;
Вызов процедуры:
mysql> CALL p3()
+------+
| s1 |
+------+
…………
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
+------+
Query OK, 1 row affected (0.00 sec)
Также применимы итерации, переходы, словом, всё, что предполагает стандарт.
Внутри функций и хранимых процедур осуществлена реализация курсоров, но, к сожале-
нию, она пока ограничена (ASESITIVE, READ ONLY и NONSCROLL):
CREATE PROCEDURE p25 (OUT return_val INT)
BEGIN
DECLARE a,b INT;
53
DECLARE cur_1 CURSOR FOR SELECT s1 FROM t;
Достарыңызбен бөлісу: |