Постоянно хранимые модули
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. Такой способ ввода данных очень быстрый, но не совсем правильный. Вероятно, следовало бы вначале проверить спектральные характеристики астероидов, а уже затем индивидуально вводить эту информацию в базу данных.