Конспект лекций по дисциплине «Сетевые базы данных», страница 24

·  нельзя с помощью GOTO переходить из секции исключительных ситуаций (EXCEPTION) в любую другую секцию блока.

Вопросы для самоконтроля

7.1.  Какие формы условного оператора IF применяются в PL/SQL?

7.2.  Какие условные операторы используются в PL/SQL кроме IF?

7.3.  Чем отличается оператор LOOP от оператора FOR?

7.4.  Как можно выйти из цикла LOOP?

7.5.  Возможно ли использование оператора GOTO в программах PL/SQL?

7.6.  Какой оператор цикла нужно использовать, если известно необходимое число проходов цикла?

7.7.  Как синтаксически оформляется метка, на которую ссылается оператор GOTO?

7.8.  Можно ли ссылаться на метку, находящуюся во внешнем блоке?

7.9.  Допустимо ли перейти из секции EXCEPTION в секцию BEGIN с помощью оператора GOTO?

7.10.  Какой из операторов правильно использовать для выхода их цикла – EXIT или EXIT WHEN?

8. Работа с базами данных

Основное назначение языка PL/SQL – разработка программ для работы с базами данных (БД) Oracle. Программы PL/SQL могут взаимодействовать с БД только посредством SQL.

            8.1. Выборка данных

Для выборки данных, хранящихся в таблицах БД используется команда SELECT … INTO… Эта команда позволяет извлекать из базы данных конкретное значение и помещать его в переменные, которые затем можно использовать в программе. Например:

DECLARE

min_comm number;

max_comm number;

BEGIN

SELECT MIN(comm), MAX(comm) INTO min_comm, max_comm

FROM sal

WHERE city = ‘London’;

END;

/

Данная команда выберет минимальные и максимальные комиссионные, выдаваемые продавцам из Лондона, и поместит результат в переменные min_comm и max_comm. Следует обратить внимание на фразу  INTO, после которой перечисляются переменные. Наличие этой фразы отличает команду SELECT языка PL/SQL от команды SELECT языка SQL.

Однако, при использовании команды SELECT … INTO … возникает проблема, если из базы данных будет выбрано несколько строк: будет зафиксировано исключение TOO_MANY_ROWS. Проблема возникнет также, если в БД не окажется ни одной строки, отвечающей заданным условиям выборки. Для обработки запросов, возвращающих несколько строк, приложение должно явно объявить курсор (см. п. 8.2).

            8.2. Курсоры

Курсоры являются одним из механизмов, использующих SQL, для обработки данных, хранящихся в БД.

Курсор – это рабочая область SQL-оператора, расположенная в оперативной памяти. Когда приложение посылает SQL-оператор серверу Oracle, сервер открывает по меньшей мере один курсор для обработки этого оператора. Для простых операторов INSERT, UPDATE и DELETE курсоры открываются автоматически. Это также относится к операторам SELECT … INTO, возвращающим одну строку. Такие курсоры называются неявными.

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

8.2.1. Создание и работа с курсорами

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

CURSOR c_sal IS

SELECT sname, comm  FROM sal  WHERE city = ‘London’;

v_sname sal.sname%TYPE;

v_comm  sal.comm%TYPE;

Здесь фраза CURSOR имя_курсора IS используется для определения курсора – в данном примере определяется курсор c_sal. После фразы CURSOR … IS указывается команда SELECT, которая и определяет выбираемые данные. Следует обратить внимание на то, что в определении курсора используется команда SELECT языка SQL, а не команда SELECT … INTO.

После определения курсора для фактического выполнения запроса и извлечения требуемых строк нужно его открыть командой OPEN:

OPEN c_sal;

После открытия курсора данные выбираются (если они существуют в БД) из базы данных и помещаются в курсор. Однако, данные все еще не перемещены в какие-либо переменные для обработки. Для такого перемещения используется следующий шаг с применением оператора FETCH: