Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
baz_dan / Главы13.doc
Скачиваний:
63
Добавлен:
12.03.2015
Размер:
321.02 Кб
Скачать

13.3. Команды управления в pl/sql

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

  • Операторы CASE

  • Операторы цикла

Конструкция полувыбора IF – THEN

IF x = 0 THEN

Y:=1;

END IF;

Конструкция полного выбора IF – ELSE - THEN

BEGIN

IF x>y THEN

Max := x;

ELSE

Max := y;

END IF;

END;

Оператор CASE имеет следующий синтаксис:

CASE переменная

WHEN выражение1 THEN значение1

WHEN выражение2 THEN значение2

WHEN выражение3 THEN значение3

ELSE значение5

END;

Циклы

Имеются три типа циклов: простой цикл LOOP, цикл FOR, цикл WHILE

Цикл LOOP

LOOP

команды;

EXIT [WHEN выражение];

END LOOP;

Для выхода из цикла используется оператор EXIT

Циклы WHILE

WHILE условие LOOP

Команда1;

Команда2;

. . .

END LOOP;

Цикл FOR

FOR I IN m . . n

LOOP

Команда1;

END LOOP

Пример.

DECLARE

m NUMBER :=1;

n NUMBER := 100;

BEGIN

FOR I IN m . . n LOOP

. . .

END LOOP;

END;

Пример. Необходимо вставить числа в таблицу TABL(num) от 1 до 10, исключая числа 5 и 7.

BEGIN

FOR i IN 1 . . 10

LOOP

IF i=6 OR i=8 THEN

null;

ELSE

INSERT INTO TABL(num)

VALUES(i);

END IF

END LOOP;

END;

13.4. Команды sql в pl/sql

SELECT – команда выборки данных.

Существуют команды SELECT однострочной выборки и многострочной.

Синтаксис команды при однострочной выборки:

SELECT список_выборки

INTO {имя_переменной [, имя_переменной] . . .| имя_записи}

FROM таблица

[WHERE условие];

Пример.

Пусть у нас имеется отношение sotrud (ns, name),

Где ns – номер сотрудника, name – имя сотрудника.

SET SERVEROUTPUT ON

DECLARE

fname VARCHAR2(25);

BEGIN

SELECT name INTO fname

FROM sotrud

WHERE ns=126;

DBMS_OUTPUT.PUT_LINE(‘ Name is: ‘ || fname);

END;

Манипулирование данными в pl/sql

Внесение изменений в таблицы базы данных с помощью команд DML:

INSERT, UPDATE, DELETE, MERGE

Оператор MERGE выбирает строки из одной таблицы для изменения или вставки в другую таблицу.

13.5. Курсор в pl/sql

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

Синтаксис объявления явного курсора:

CURSOR имя_курсора IS команда_SELECT;

Пример.

DECLARE

CURSOR q IS

SELECT ns, name FROM sotrud

WHERE ns=140;

Управление явным курсором производится по следующей схеме, см.рис.13.4.

Рис.13.4. Схема управления курсором

Пример. Выборка данных из курсора.

SET SERVEROUTPUT ON

DECLARE

CURSOR q IS

SELECT ns, name FROM sotrud

WHERE ns=140;

num sotrud.ns%TYPE;

lname sotrud.name%TYPE;

BEGIN

OPEN q;

FETCH q INTO num, lname;

DBMS_OUTPUT.PUT_LINE (num || ‘ ‘ || lname);

. . .

END;

Пример. Выборка данных в цикле.

SET SERVEROUTPUT ON

DECLARE

CURSOR q IS

SELECT ns, name FROM sotrud

WHERE ns=140;

num sotrud.ns%TYPE;

lname sotrud.name%TYPE;

BEGIN

OPEN q;

LOOP

FETCH q INTO num, lname;

EXIT WHEN q%NOTFOUND;

DBMS_OUTPUT.PUT_LINE (num || ‘ ‘ || lname);

END LOOP;

. . .

END;

Курсорный цикл FOR

Курсорный цикл FOR включает курсор SELECT и позволяет осуществлять выборку нескольких строк из базы данных. При этом не нужно заботиться об открытии и закрытии курсора. ORACLE сделает это самостоятельно внутри цикла. В цикле FOR объявлять курсор не требуется.

Пример.

SET SERVEROUTPUT ON

BEGIN

FOR q IN ( SELECT ns, name FROM sotrud

WHERE ns=140;

LOOP

DBMS_OUTPUT.PUT_LINE (q.ns || ‘ ‘ || q.name);

END LOOP;

END;

Здесь переменная q используется для сохранения результатов выполнения курсора.

Соседние файлы в папке baz_dan