Динамический SQL

Страницы работы

Содержание работы

Динамический SQL

·  пакет DBMS_SQL (Oracle7)

·  внутренний динамический SQL, интегрированный с языком PL/SQL (Oracle8i).

2. Использование DBMS_SQL

2.1. Обработка операторов DDL

1.  Открытие курсора (OPEN_CURSOR)

2.  Грамматический разбор оператора (PARSE)

3.  Закрытие курсора (CLOSE_CURSOR)

CREATE OR REPLACE PROCEDURE Create_table  (

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;

Похожие материалы

Информация о работе