Введение в SQL/PSM — объявление переменных, операторы циклов и т.д.


1. Объявление переменных

DECLARE <имя переменной> [DEFAULT <значение>]

Примечания: переменные могут иметь любой SQL-тип данных (использование доменов не предусмотрено). Особенностью этих переменных является то, что они могут хранить NULL-значения. В SQL Server имя локальной переменной предваряется символом @, а глобальной — @@.

Присвоение значений переменным:

SET <имя переменной>=<выражение>

Примечание: В ряде СУБД присвоение значения локальной переменной производится с помощью оператора SELECT.

2. Управление логикой исполнения

IF <условие> THEN <операторы> [ELSIF <условие> THEN <операторы>] [ELSE <операторы>] END IF

Пример:

IF City IN (‘London’, ‘Boston’) THEN <оператор>;<оператор>;…
ELSIF Snum=1001 THEN <оператор>;<оператор>;… ELSE <оператор>;<оператор>;…
END IF;

3. Операторы циклов

1) Объявление операторов циклов

LOOP <операторы> END LOOP

– не выполняет никакой проверки на завершение.

WHILE <условие> DO <операторы> END WHILE

REPEAT <операторы> UNTIL <условие> END REPEAT

FOR <индекс> IN [REVERSE] .. DO <операторы> END FOR

2) Примечания
• В начале составного оператора и в конце многих операторов управления логикой исполнения может быть определена метка и использован оператор GOTO для перехода к ней.
• Возможно использование оператора LEAVE (на практике чаще CONTINUE) для досрочного оператора.
• Оператор RESIGNAL (на практике чаще EXIT, в SQL Server – BREAK) позволяет выйти из цикла на следующий за ним оператор.

3) Пример на циклы

DECLARE s Varchar(30);
SET s=(SELECT SName FROM SalesPeople WHERE City=’Rome’);
WHILE LENGTH(s)<30 SET s=s||'.'; - || - сложение строк (строка дополняется точками до конца). END WHILE;

4. Указатели условий

1) Объявление указателя условий

DECLARE <имя условия> CONDITION {FOR SQLSTATE VALUE <код ошибки>|SQLWARNING|NOT FOUND|SQLEXCEPTION}

Примечание:
SQLSTATE VELUE <код ошибки> — позволяет указать конкретное значение SQLSTATE.
SQLWARNING – класс SQLSTATE ‘01’.
NOT FOUND – класс SQLSTATE ‘02’.
SQLEXCEPTION – класс SQLSTATE, отличный от ‘00’, ‘01’, ‘02’.

2) Оператор обработки условий

DECLARE {CONTINUE|EXIT|UNDO HANDLER FOR <имя условия>} <оператор>

Примечание:
• CONTINUE указывает на продолжение работы непосредственно после оператора, при выполнении которого был вызван данный указатель.
• EXIT указывает на необходимость продолжения работы непосредственно после составного оператора (BEGIN END), к котором вызван данный указатель.
• UNDO указывает на необходимость аннулирования работы предыдущих операторов в составном операторе и продолжения работы сразу после того оператора, который вызвал данный указатель.

3) Пример на указатель условия

BEGIN
DECLARE Ic Integer DEFAULT 1;
DECLARE FTrue Integer DEFAULT 0;
WHILE FTrue=0 DO BEGIN ATOMIC
DECLARE BadOp CONDITION FOR SQLSTATE VALUE ‘40003’;
DECLARE UNDO HANDLER //повтор до 3-х раз добавления строк
FOR BadOp //BadOp – имя условия
BEGIN
IF Ic>3 THEN RESIGNAL; END IF; //BREAK
SET Ic=Ic+1;
END;
INSERT INTO Customer VALUES (2009, ‘Hammer’, ‘New York’, 150);
INSERT INTO Orders VALUES (3012 109.86, 15/12/1999, 2009, 1007);
SET FTrue=1;
END; END WHILE;
END;

5. Оператор FOR

FOR <имя курсора> AS <запрос> DO <операторы> END FOR

Примечание: оператор FOR неявным образом открывает курсор, осуществляет выборку строк курсора и исполняет тело оператора FOR по одному разу для каждой строки, а затем закрывает курсор. <имя курсора> можно использовать для обновления и удаления строк курсора. В СУБД InterBase|Firebird <имя курсора> не указывается.

Пример на оператор FOR:

DECLARE s Varchar(300) DEFAULT ‘’;
FOR CurSP AS SELECT * FROM SalesPeople WHERE SNum>=1001 DO
IF s<>’’ THEN SET s=s||’,’;
END IF;
SET s=s||City;
END FOR;


Комментарии запрещены.




Статистика