Динамический SQL
· пакет DBMS_SQL (Oracle7)
· внутренний динамический SQL, интегрированный с языком PL/SQL (Oracle8i).
2. Использование DBMS_SQL
2.1. Обработка операторов DDL
1. Открытие курсора (OPEN_CURSOR)
2. Грамматический разбор оператора (PARSE)
3. Закрытие курсора (CLOSE_CURSOR)
p_Description IN VARCHAR2) IS
v_Cursor NUMBER;
v_CreateString VARCHAR2(100);
BEGIN
v_Cursor := DBMS_SQL.OPEN_CURSOR;
v_CreateString := ‘CREATE TABLE MyTab ’ || p_Description;
DBMS_SQL.PARSE(v_Cursor, v_CreateString, DBMS_SQL.NATIVE);
DBMS_SQL.CLOSE_CURSOR(v_Cursor);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL. CLOSE_CURSOR(v_Cursor);
RAISE;
END Create_table;
2.2. Обработка операторов Altersession и операторов управления транзакциями
1. Открытие курсора (OPEN_CURSOR)
2. Грамматический разбор оператора (PARSE)
3. Обработка оператора (EXECUTE)
4. Закрытие курсора (CLOSE_CURSOR)
2.3. Обработка операторов DML
1. Открытие курсора (OPEN_CURSOR)
2. Грамматический разбор оператора (PARSE)
3. Привязка всех входных переменных (BIND_VARIABLE)
4. Обработка оператора (EXECUTE)
5. Закрытие курсора (CLOSE_CURSOR)
2.4. Обработка запросов
1. Открытие курсора (OPEN_CURSOR)
2. Грамматический разбор оператора (PARSE)
3. Привязка всех входных переменных (BIND_VARIABLE)
4. Описание элементов списка выбора (DEFINE_COLUMN)
5. Обработка оператора (EXECUTE)
6. Считывание строки (FETCH_ROWS)
7. Запись результата в переменные PL/SQL (COLUMN_VALUE)
8. Закрытие курсора (CLOSE_CURSOR)
CREATE OR REPLACE PROCEDURE DynaQuery (
p_City IN VARCHAR2) IS
v_Cursor NUMBER;
v_SelectStm VARCHAR2(100);
v_Name Sal.sname%TYPE;
v_Dummy NUMBER;
BEGIN
v_Cursor := DBMS_SQL.OPEN_CURSOR;
v_SelectStm := ‘SELECT sname FROM sal WHERE city=:s
ORDER BY sname’;
DBMS_SQL.PARSE(v_Cursor, v_SelectStm, DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(v_Cursor, ‘:s’, p_City);
DBMS_SQL.DEFINE_COLUMN(v_Cursor, 1, v_Name, 10);
v_Dummy := DBMS_SQL.EXECUTE(v_Cursor);
LOOP
IF DBMS_SQL.FETCH_ROWS(v_Cursor)=0 THEN EXIT; END IF;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.