
Роль пакета 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).