Динамический SQL, оператор одноэтапного исполнения


1. Причины разработки динамического SQL

Существует достаточно большой класс приложений, в которых невозможно заранее определить алгоритм доступа к БД.

Если программа только на этапе выполнения решает, какие SQL-операторы выполнять и на какие таблицы и столбцы ссылаться, то статический SQL для нее непригоден.

2. Концепция динамического SQL

Концепция, лежащая в основе динамического SQL, проста: встроенный SQL-оператор не записывается в исходный текст программы. Вместо этого программа формирует текст оператора во время выполнения, а затем передает сформированный SQL-оператор в СУБД для выполнения «на ходу». Поскольку в процессе выполнения SQL-оператора происходит синтаксический анализ, проверка параметров, оптимизация и генерация плана выполнения, то динамический SQL уступает по производительности статическому SQL.

3. Оператор одноэтапного исполнения

1) Синтаксическая форма

EXECUTE IMMEDIATE <переменная HOST-языка>

2) Механизм исполнения
• SQL-оператор формируется в виде текстовой строки. Это может быть любой SQL-оператор, не считывающий данных (то есть кроме SELECT и FETCH), поскольку оператор EXECUTE IMMEDIATE не имеет механизма обработки результатов запроса.

• Далее сформированная строка передается в СУБД, где и выполняется, пройдя все этапы подготовки.

• По окончании переменной SQLCODE присваивается код завершения.

3) Пример одноэтапного исполнения

sprintf (buffer, “delete from Orders where CNum=%d”, cust_num);
exec sql execute immediate :buffer;

Примечания: buffer – строка для хранения текста SQL-оператора.

Схема выполнения программы со встроенными инструкциями динамического SQL с применением одноэтапной схемы
Схема выполнения программы со встроенными инструкциями динамического SQL с применением одноэтапной схемы


Комментарии запрещены.




Статистика