Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сведения о языке SQL.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
159.14 Кб
Скачать

Процедурные операторы блоковая структура кода

Процедурный язык имеет блоковую структуру. Группировка команд производится операторами BEGIN END. Вложенные блоки разрешаются. Oracle позволяет независимый блок, у остальных внешний блок должен быть в составе функции или т.п. Оператор DECLARE позволяет объявить локальные переменные блока. По умолчанию переменные инициализируются в null. Для удобства в Oracle и PostgreSQL можно использовать два псевдотипаtype и rowtype. Первый определяет тип переменной такой же как у столбца указанной таблицы. Второй определяет тип переменной как структуру соответствующую записи указанной таблицы.

-- Oracle, PostgreSQL

DECLARE

i integer:=3;

t tblname.id%type;

trow tblname%rowtype;

BEGIN

...

END;

-- MySQL

BEGIN

-- локальная переменная

DECLARE o integer DEFAULT 3;

DECLARE i double precision DEFAULT 3.14;

...

END;

Присвоение

Для присвоения значения переменной используется операция :=. В MySQL присвоение должно происходить в операторе SET (по стандарту).

-- Oracle, PostgreSQL

i:=23;

-- MySQL

SET i:=23;

SET i=23;

Условный оператор

Условный оператор IF позволяет выполнить ряд команд, если указанное условие истинно. Внутри него может быть сколько угодно не обязательных алтернативных условий ELSE IF, и одного необязательного слова ELSE, определяющего что делать, если ни одно условие не выполнено.

-- Oracle

IF i >3 THEN

delete from tblname where id>40;

ELSIF i=-4 then -- альтернативное условие

delete from tblname where id=4;

ELSE

delete from tblname ;

END if;

-- MySQL

IF i >3 THEN

delete from tblname where id>40;

ELSEIF i=-4 then -- альтернативное условие

delete from tblname where id=4;

ELSE

delete from tblname ;

END IF;

-- в PostgreSQL ELSEIF синоним ELSIF,

-- так что оба приведенных выше примера верны

Оператор выбора

В первом синтаксисе оператор выбора CASE позволяет выполнить тот или иной код в зависимости от значения указанного выражения. Во втором синтаксисе конструкция CASE аналогична условному оператору. Обратите внимание, что в отличие от CASE, используемого в обычных командах SQL, этот оператор завершается словами END CASE, а не просто END. Данный оператор не поддерживается в PostgreSQL.

-- Oracle

CASE i

WHEN 2 THEN i:=4;

WHEN 5 THEN i:=0;

ELSE i:=5;

END CASE;

-- MySQL

CASE i

WHEN 2 THEN

set i:=4;

WHEN 5 THEN

set i:=0;

ELSE

set i:=5;

END CASE;

метки

Метки полезны, когда есть вложенные циклы и нужно выйти из внешнего внутри вложенного. Фактически они именует блок или цикл. А в MySQL они обязательны для операторов выхода из цикла и продолжения итерации.

-- Oracle, PostgreSQL

<<l1>>

-- MySQL

l1:

Безусловный цикл

Безусловный цикл определяется оператором LOOP. Другими словами условие выхода указывается явно внутри тела цикла.

-- Oracle, PostgreSQL

-- оператор выхода EXIT

-- без метки

LOOP

i:=i+1;

EXIT WHEN i>11;

END LOOP;

-- Oracle, PostgreSQL

-- с меткой

<<l1>>LOOP

i:=i+1;

EXIT l1 WHEN i>11;

END LOOP l1;

-- MySQL

-- оператор выхода LEAVE

l1: LOOP

set i:=i+1;

if i>11 then

LEAVE l1;

end if;

END LOOP l1;