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

Особенности оператора

Если в программе содержится много динамических операторов, то машинное время, затрачиваемое на одноэтапное выполнение операторов, может быть очень значительным.

Если выполняемые операторы похожи друг на друга, то расход машинного времени будет просто расточительным.

Механизм двухэтапного исполнения

• В программе создается строка, содержащая SQL-оператор. Любая константа в тексте оператора может быть заменена на символ ? – маркер параметра (динамические параметры).
• Оператор PREPARE дает команду СУБД произвести синтаксический анализ SQL-оператора: проверить его правильность, оптимизировать и создать план выполнения.
• Если требуется выполнить подготовленный SQL-оператор, то используется оператор EXECUTE вместе со значениями всех маркеров параметров.
• СУБД подставляет значения параметров, исполняет ранее подготовленный план и присваивает код завершения переменной SQLCODE.

Создание оператора из строки

PREPARE [GLOBAL|LOCAL] <имя оператора> FROM <имя переменной>

Примечания:
• <переменная> должна хранить строку с текстом SQL-оператора.
GLOBAL|LOCAL определяет область использования подготовленного оператора или область дескриптора. LOCAL действует по умолчанию.

Выполнение подготовленного оператора

EXECUTE [GLOBAL|LOCAL] <имя оператора> [INTO <переменные> |SQL DESCRIPTOR] [USING <переменные HOST-языка>|SQL DESCRIPTOR <имя дескриптора>]

Примечания: INTO используется совместно с оператором SELECT.

Отмена подготовленного оператора

DEALLOCATE PREPARE <имя оператора>

Пример двухэтапного исполнения

sprintf (buffer, “update %s set %s=? where %s=?”, tblname, seachcol, updetecol);
exec sql prepare mystmt from :buffer;
exec sql execute mystmt using :seach_value, :new_value;

Примечания: buffer – строка для хранения текста SQL-оператора. mystmt – имя оператора, подлежащего исполнению.

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

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


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





Статистика

Рейтинг@Mail.ru