Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_BD_Full.docx
Скачиваний:
39
Добавлен:
13.09.2019
Размер:
945.28 Кб
Скачать
  1. Pl/sql. Курсоры. Курсорный цикл for.

Под курсором в Oracle понимается получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи. В PL/SQL поддерживаются два типа курсоров: явные и неявные. Явный курсор объявляется разработчиком, а неявный курсор не требует объявления. Курсор может возвращать одну строку, несколько строк или ни одной строки. Для запросов, возвращающих более одной строки, можно использовать только явный курсор. Курсор может быть объявлен в секциях объявлений любого блока PL/SQL, подпрограммы или пакета. Для управления явным курсором используются операторы CURSOR , OPEN , FETCH и CLOSE. Оператор CURSOR выполняет объявление явного курсора.

Оператор OPEN открывает курсор, создавая новый результирующий набор на базе указанного запроса.

Оператор FETCH выполняет последовательное извлечение строк из результирующего набора от начала до конца.

Оператор CLOSE закрывает курсор и освобождает занимаемые им ресурсы.

Для объявления явного курсора используется оператор CURSOR , который может иметь следующее формальное описание:

CURSOR cursor_name

[(parameter[,parameter]...)]

[RETURN return_type]

IS select_statement;

Каждый параметр parameter определяется как:

cursor_parameter_name [IN]

datatype [{:= | DEFAULT} expr]

    1. Курсорный цикл for.

Вместо управления курсором операторами OPEN , FETCH и CLOSE язык PL/SQL предоставляет возможность последовательной обработки курсора в цикле FOR.

Цикл FOR с курсором выполняет следующие действия:

  1. Неявно объявляет переменную цикла как запись %ROWTYPE.

  2. Открывает курсор.

  3. При каждой итерации извлекает следующую строку из результирующего набора в поля неявно объявленной записи.

  4. По достижении конца результирующего набора закрывает курсор.

Например:

DECLARE

CURSOR c1 IS

SELECT f1, f2 FROM tbl2

WHERE f1 = 10;

BEGIN

- Неявное объявление rec1

FOR rec1 IN c1 LOOP

/* Выбрана следующая

строка таблицы */

INSERT INTO temp_tbl

VALUES (rec1.f2);

END LOOP;

COMMIT;

END;

  1. Pl/sql. Хранимые процедуры

Хранимая процедура (stored procedure) — это программа, которая вы­полняет некоторые действия с информацией в базе данных и при этом сама хранится в базе данных. В Oracle хранимые процедуры можно мож­но писать на языках PL/SQL и Java.

Хранимые процедуры могут входные параметры и возвращать резуль­таты. В отличие от триггеров, которые принадлежат определенной табли­це или представлению, хранимые процедуры принадлежат базе данных в целом. Они могут вызываться любым процессом, использующим базу дан­ных, при условии, что у этого процесса есть достаточные права доступа.

Хранимые процедуры используются для многих целей. Хотя админи­страторы баз данных используют их для выполнения рутинных задач ад­министрирования, главной областью их применения являются все же при­ложения баз данных. Эти процедуры могут вызываться из прикладных программ, написанных на таких языках, как Java, С#, С++ или VB.Net, а также из веб-сценариев, написанных на VBScript или JavaScript. Кроме того, эти процедуры можно вызывать в интерактивном режиме из команд­ной оболочки SQL*Plus.

Можно выделить следующие преимущества хранимых процедур:

В отличие от кода приложений, хранимые процедуры никогда не пере­даются на клиентские компьютеры. Она всегда находятся в базе данных и выполняются СУБД на том компьютере, где располагается сервер базы данных. Таким образом, они более безопасны, чем распространяемый код приложения, а кроме того, снижают сетевой трафик. Хранимые процеду­ры постепенно становятся предпочтительным режимом реализации логи­ки приложения в сети Интернет и корпоративных интрасетях. Еще одно преимущество хранимых процедур заключается в том, что SQL-операторы в них могут быть оптимизированы компилятором СУБД.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]