Иллюстрированный самоучитель по SQL для начинающих

Постоянно хранимые модули

LEAVE

Оператор LEAVE (покинуть) действует согласно названию. Как только выполнение программы доходит до оператора LEAVE с меткой, он передает управление команде, расположенной сразу после помеченной. Например:

AsteroidPreload:
SER vcount = 0;
LOOP
SET vcount = vcount+1;
IF vcount > 1000
THEN
LEAVE AsteroidPreload;
END IF;
INSERT INTO asteroid (AsteroidID)
VALUES (vcount);
END LOOP AsteroidPreload

Приведенный выше код создает 1000 последовательно пронумерованных записей в таблице астероидов и затем завершает цикл.

WHILE…DO…END WHILE

Оператор WHILE предоставляет другой метод многократного выполнения последовательности команд SQL. Если условие оператора WHILE истинно, цикл продолжает выполняться. Если нет – выполнение цикла тут же прекращается. Например:

AsteroidPreload2:
SET vcount = 0;
WHILE
vcount < 100 0 DO
SET vcount = vcount+1;
INSERT INTO asteroid (AsteroidID)
VALUES (vcount);
END WHILE AsteroidPreload2

Результат работы этого кода точно такой же, как в предыдущем случае. Это еще раз подтверждает то, что в SQL существует много методов решения поставленной задачи. Забота программиста – выбрать наиболее подходящий.

REPEAT…UNTIL..END REPEAT

Цикл REPEAT очень похож на цикл WHILE. Различие между ними заключается в том, что условие проверяется после выполнения команд цикла. Например:

AsteroidPreload3:
SET vcount = 0;
REPEAT
SET vcount = vcount+1;
INSERT INTO asteroid (AsteroidID)
VALUES (vcount);
UNTIL vcount = 1000
END REPEAT AsteroidPreload3

Совет:
Хотя во всех трех приведенных выше примерах одна и та же операция с одинаковой легкостью выполнялась тремя различными методами (с помощью операторов LOOP, WHILE и REPEAT), очень часто встречаются ситуации, когда один из методов имеет явные преимущества перед другими. Поэтому лучше хорошо знать все три метода и в конкретных обстоятельствах выбрать наиболее подходящий
.

FOR…DO…END FOR

Цикл FOR в SQL объявляет и открывает курсор, выполняет выборку строк курсора, выполняет команды тела цикла FOR для каждой строки, а затем закрывает курсор. Такой цикл позволяет построчно обрабатывать данные в SQL без обращения к базовому языку. Если реализация SQL поддерживает циклы FOR, их можно использовать в качестве альтернативы: курсорам, описанным в главе 18. Ниже приведен пример цикла FOR.

FOR vcount AS Cursl CURSOR FOR
SELECT AsteroidID FROM asteroid
DO
UPDATE asteroid SET Description = 'stony iron1
WHERE CURRENT OF Cursl;
END FOR

В данном примере происходит обновление каждой строки таблицы Asteroid путем ввода 'stony iron' в поле Description. Такой способ ввода данных очень быстрый, но не совсем правильный. Вероятно, следовало бы вначале проверить спектральные характеристики астероидов, а уже затем индивидуально вводить эту информацию в базу данных.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.