DBMS_SQL.COLUMN_VALUE(v_Cursor, 1, v_Name);
INSERT INTO Temp_tab (char_col) VALUES(v_Name);
END LOOP;
DBMS_SQL.CLOSE_CURSOR(v_Cursor);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL. CLOSE_CURSOR(v_Cursor);
RAISE;
END DynaQuery;
2.5. Обработка анонимных блоков PL/SQL
1. Открытие курсора (OPEN_CURSOR)
2. Грамматический разбор оператора (PARSE)
3. Привязка всех входных переменных (BIND_VARIABLE)
4. Обработка оператора (EXECUTE)
5. Считывание значений выходных переменных (VARIABLE_VALUE)
6. Закрытие курсора (CLOSE_CURSOR)
3. Использование внутреннего динамического SQL
· EXECUTE IMMEDIATE
· OPENFOR (для запросов, возвращающих более одной строки)
3.1. Обработка операторов, не являющихся запросами, и для блоков PL/SQL
EXECUTE IMMEDIATE строка_символов_sql
[INTO {перемменная[, переменная]…| запись}]
[USING [IN | OUT | IN OUT] аргумент
[, [IN | OUT | IN OUT] аргумент ]…];
3.1.1. Операторы без переменных привязки
v_SQLString VARCHAR2(200);
v_PLSQLBlock VARCHAR2(500);
BEGIN
EXECUTE IMMEDIATE ‘CREATE TABLE exe_tab (col1 VARCHAR2(10))’;
FOR v_Cnt IN 1..5 LOOP
v_SQLString := ‘INSERT INTO exe_tab VALUES (‘’Row ‘|| v_Cnt || ’’’)’;
EXECUTE IMMEDIATE v_SQLString;
END LOOP;
v_PLSQLBlock :=
FOR v_Rec IN (SELECT * FROM exe_tab) LOOP
DBMS_OUTPUT.PUT_LINE(v_Rec.col1);
END LOOP;
END;’;
EXECUTE IMMEDIATE v_PLSQLBlock;
EXECUTE IMMEDIATE ‘DROP TABLE exe_tab’;
END;
3.1.2. Операторыспеременнымипривязки
DECLARE
v_SQLString VARCHAR2(200);
v_SQLString :=
‘INSERT INTO cust(cnum,cname,city,rating,snum)
VALUES(:cn, :cnm, :ct, :rt, :sn)’;
USING 2020, ‘Tom’, ‘Berlin’, 100, 1002;
END;
3.2. Обработка запросов
3.2.1. Многострочные запросы
OPENкурсорная_переменнаяFORстрока_символов_sql
[USING аргумент [, аргумент]… ];
DECLARE
TYPE t_SalCur IS REF CURSOR;
v_SalCur t_SalCur;
v_Sal sal%ROWTYPE;
v_SQLSring VARCHAR2(200);
BEGIN
v_SQLSring := ‘SELECT * FROM sal WHERE city=’’London’’’;
OPEN v_SalCur FOR v_SQLSring;
LOOP
FETCH v_SalCUR INTO v_Sal;
EXIT WHEN v_SalCur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(‘Fetched sname is ’ || v_Sal.sname);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.