Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-06-02.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
26.54 Mб
Скачать

5.4.2. Операторы управления

Оператор выбора Примеры

If <условие> Then If oklad <1000 then

<операторы>; matpom:=1000;

[[Elsif <условие> Then elsif oklad <5000 then

<операторы>;] matpom:= 500;;

… else

[Else <операторы> ;]] matpom:=0;

End if; end if;

Оператор цикла Loop: Loop

Loop Fetch sotr into Sotr_zap;

<операторы>; Exit when sotr%notfound; ...

End loop; End loop;

Оператор цикла While:

While <условие> loop While i<1000 loop

<операторы>; s:=1/i;

End loop; End loop;

Оператор цикла For:

For <переменная цикла> in [reverse] For i in1..10000 loop

<список интервалов значений> loop insert into dolgnosti

<операторы>; values(md(i).kd, md(i).nd);

End loop; End loop

reverse ‑ просмотр списка значений в порядке от последнего к первому.

Интервал задается в виде: <начальное значение>..<конечное значение>

Оператор группового связывания Forall (выполняется быстрее):

Forall <переменная цикла> in [reverse] Forall i in1..10000 loop

<список интервалов значений> loop insert into dolgnosti

<оператор>; values(md(i).kd, md(i).nd);

Оператор Exit when <условие> используется для досрочного вы­хо­да из цикла при выполнении указанного условия.

Оператор Goto <метка> используется для безусловного перехода на заданную метку. Нельзя использовать этот оператор для перехода вовнутрь цикла, условного оператора или подблока. Метка указывается в двойных угловых кавычках.

Пример цикла for.

begin

for i in 1..10 loop

if mod(i,2) = 0 then insert into temp values (i, ' Четное число');

else insert into temp values (i, ' Нечетное число');

end if;

end loop; commit; select * from temp;

end;

5.4.3. Выражения

В выражениях могут быть использованы следующие группы опе­ра­то­ров: присвоение значения (:=), арифметические (+, -, *, /, **), логи­чес­кие опе­раторы (not, and, or), операторы сравнения (=, <>, !=, <, >, <=, >=, is null, like, between, in) и операции над строками ( ||).

В выражениях могут использоваться встроенные функции (прил. 5).

5.4.4. Переменные

5.4.4.1. Скалярные переменные

При объявлении переменных можно использовать следующие типы полей баз данных: char(s), varchar2(s), number(p,s), date, long, raw(s) (п. 5.1.14) и дополнительные типы:

Binary_Integer ‑ целое со знаком от -2147483647 до +2147483647;

Pls_Integer - аналогично Binary_Integer, но быстрее обрабатывается;

Boolean - логический (True, False);

Record (запись), Table (таблица или массив), Varray (массив переменных) - компо­зит­ные (составные) типы, объявляемые ко­ман­дой Type;

Ref Cursor, Ref object_type. ‑ cсылочные типы;

Bfile (двоичный файл), Blob (столбец), Clob (символьный объект), Nclob (символьный объект с национальным набором символов) ‑ ссылочные ти­пы на большие объекты.

Некоторые типы имеют стандартные подтипы, служащие для под­дер­жания сов­­мес­тимости с типами полей базы данных и других программных систем: Numeric (dec, decimal, double precision, float, int, integer, numeric, real, smallint), binary_integer (natural, positive, naturaln, positiven), lob (bfile1, blob2, clob3, nclob4).

Можно формировать типы/подтипы пользователя оператором:

Type/Subtype <имя типа/подтипа> is <базовый тип>

При объявлении подтипа нельзя указывать длину в базовом типе.

Переменные объявляются в виде следующих вариантов:

<имя переменной> <тип> [[Not Null]:=<первоначальное значение>]

<имя переменной> <имя переменной 2>%Type [:=<значение>]

<имя переменной> <владелец>.<таблица>.<столбец>%Type[:=<значение>]

<имя переменной‑записи> <имя таблицы или курсора>%RowType

Параметры %Type и %Rowtype выполняют базирование переменных.

Параметр %Type объявляет переменную типа, соответствующего типу другой переменной или типу столбца таблицы, ука­зан­ных перед этим параметром (Stoimost Real (9,2); Sum_Stoimost Stoimost%Type;).

Параметр %RowType позволяет объявить переменную типа, запись (п. 5.4.2.2) которой соответствует строке таблицы (именам и типам столбцов).

Локальные переменные видны только в блоке их объявления. Для об­ращения к переменной из охватывающего блока нужно указать имя этого блока, точку и имя этой переменной.

Переменным можно присваивать значения двумя способами:

  1. применением оператора присваивания (Dept_no:=20);

  2. выполнением запроса (Select nt into nt from Post where kt=1001).