Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 Dynamic SQL (TBD).doc
Скачиваний:
8
Добавлен:
19.11.2019
Размер:
57.86 Кб
Скачать

Роль пакета dbms_sql

Пакет DBMS_SQL включает много процедур и функций, которые обеспечивают процедурный интерфейс на PL/SQL для реализации различных этапов определения и выполнения динамически формируемых SQL и PL/SQL предложений в хранимых процедурах, функциях и пакетах.

За работу с динамическими SQL-запросами отвечает пакет DBMS_SQL. В общем, работа с ним происходит по следующей схеме.

1. Строится сам текст запроса с метками для параметров. Текст запроса может быть представлен в виде строки или коллекции строк.

2. Функцией DBMS_SQL.Open_Cursor выделяется идентификатор курсора, который будет использоваться для работы с запросом. Идентификатор ссылается на внутреннюю структуру Oracle, определяющую курсор. Этот идентификатор используется процедурами пакета DBMS_SQL.

3. Выполняется разбор текста запроса DBMS_SQL.Parse.

4.Устанавливаются значения параметров запроса DBMS_SQL.Bind_Variable.

5. Если запрос возвращает данные, то определяются столбцы и буферные переменные, в которых будут размещаться возвращаемые данные. DBMS_SQL.Define_Column.

6. Запрос выполняется. DBMS_SQL.Execute.

7. Если запрос возвращает данные, то производится выборка данных из курсора и необходимая их обработка. DBMS_SQL.Fetch_Rows, DBMS_SQL.Column_Value.

8. Курсор закрывается. DBMS_SQL.Close_Cursor.

Встроенный динамический sql

Встроенный динамический SQL впервые появился в Oracle 8i. Он позволяет декларативно выполнять динамический SQL в среде PL/SQL. Большинство действий можно выполнить с помощью одного оператора, EXECUTE IMMEDIATE, а остальные – с помощью оператора OPEN FOR. Оператор EXECUTE IMMEDIATE имеет следующий син­таксис:

EXECUTE IММEDIATE 'оператор'

[INTO {переменная1[, переменная2, ... переменнаяК ] | запись}]

[USING [IN | ОUТ | IN OUT] связываемая_переменная1, ...связываемая_ переменная N]

[{RETURNING | RETURN} INTO результат1 [, ..., результатN]...] ;

где:

оператор – любой оператор SQL или PL/SQL-блок;

переменная1, переменная2, ... пepeмeннaяN или запись — переменные PL/SQL, в которые необходимо выбрать данные (столбцы одной строки результатов оператора SELECT);

связываемая_переменная1,... cвязывaeмaя_пepeмeннaяN – набор переменных PL/ SQL, используемых для передачи входных данных/результатов;

результат1, ... peзультат N — набор PL/SQL-переменных, используемых для раз­мещения результатов, возвращаемых конструкцией RETURN оператора ЯМД.

Порядок выполнения работы

1.Запустить ORACLE Client, подсоединиться к базе данных с именем SCOTT/TIGER , имя базы данных – XE.

2. Создать блок PL/SQL, в котором создается таблица базы данных со структурой (col1 varchar2, num_col number) с использованием пакета DBMS_SQL. Имя таблицы TEST1_№группы_№бригады определяется как значение параметра при вызове блока.

3. Создать блок PL/SQL, в котором занести в созданную таблицу одну строку с использованием пакета DBMS_SQL. Заносимые значения определяются как параметры при вызове блока.

4. Выполнить созданный блок несколько раз с различными значениями параметров.

5. Выберите информацию о сотрудниках (ename, sal) из таблицы SCOTT.EMP, работающих в отделе, номер которого (deptno) задается через входные переменные, и занесите её в таблицу TEST1_Nгруппы_№бригады.

6. Выполнить те же команды (CREATE, INSERT, SELECT) с использованием встроенного динамического SQL. Создавать таблицу TEST2_№группы_№бригады (col1 varchar2, num_col number).