«Бог не меняет того, что (происходит) с людьми, пока они сами не изменят своих помыслов.» Коран, Сура 12:13

СУБД/лекция 5 семестр 2

Материал из Wiki
< СУБД
Версия от 17:42, 24 марта 2014; Vidokq (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Курсоры

Курсоры используются для прохождения по набору строк, возвращенному запросом, а также обработки каждой строки.

MySQL поддерживает курсоры в хранимых процедурах. Вот краткий синтаксис создания и использования курсора.

1	DECLARE cursor-name CURSOR FOR SELECT ...;       /*Объявление курсора и его заполнение */  
2	DECLARE  CONTINUE HANDLER FOR NOT FOUND          /*Что делать, когда больше нет записей*/  
3	OPEN cursor-name;                                /*Открыть курсор*/  
4	FETCH cursor-name INTO variable [, variable];    /*Назначить значение переменной, равной текущему значению столбца*/  
5	CLOSE cursor-name;                               /*Закрыть курсор*/

В этом примере мы проведем кое-какие простые операции с использованием курсора:

	DELIMITER //  
 
	CREATE PROCEDURE `proc_CURSOR` (OUT param1 INT)  
	BEGIN 
	    DECLARE a, b, c INT;  
	    DECLARE cur1 CURSOR FOR SELECT col1 FROM table1;  
	    DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;  
	    OPEN cur1;  
 
	    SET b = 0;  
	    SET c = 0;  
 
	    WHILE b = 0 DO  
	        FETCH cur1 INTO a;  
	        IF b = 0 THEN 
	            SET c = c + a;  
	    END IF;  
	    END WHILE;  
 
	    CLOSE cur1;  
	    SET param1 = c;  
 
	END //

У курсоров есть три свойства, которые вам необходимо понять, чтобы избежать получения неожиданных результатов:

  • Не чувствительный: открывшийся однажды курсор не будет отображать изменения в таблице, происшедшие позже. В действительности, MySQL не гарантирует то, что курсор обновится, так что не надейтесь на это.
  • Доступен только для чтения: курсоры нельзя изменять.
  • Без перемотки: курсор способен проходить только в одном направлении - вперед, вы не сможете пропускать строки, не выбирая их.