Динамический 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 с применением одноэтапной схемы