EXECUTE IMMEDIATE — динамическая подготовка и выполнение оператора
EXECUTE IMMEDIATE строка
EXECUTE IMMEDIATE немедленно подготавливает и выполняет динамически заданный оператор SQL без получения строк результата.
строка #Строковый литерал или главная переменная, содержащая SQL-оператор, подлежащий выполнению.
При обычном использовании параметр строка представляет собой ссылку на главную переменную, содержащую динамически сконструированный оператор SQL. Использование литеральной строки малополезно; можно просто написать оператор SQL напрямую, не прибегая к дополнительному вводу EXECUTE IMMEDIATE.
Если вы используете строковый литерал, имейте в виду, что любые двойные кавычки, которые вы захотите включить в оператор SQL, должны быть записаны в виде восьмеричных escape-последовательностей (\042) а не в привычной для языка C
форме \". Это связано с тем, что строка находится внутри
секции команда EXEC SQL поэтому лексический анализатор препроцессора ECPG разбирает её
в соответствии с правилами SQL, а не правилами C. Любые встроенные обратные косые черты будут позже обработаны по правилам C; однако \"
вызывает немедленную синтаксическую ошибку, так как это воспринимается как завершение литерала.
Вот пример, в котором выполняется INSERT
оператор с использованием EXECUTE IMMEDIATE и главной
переменной с именем команда:
sprintf(command, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')");
EXEC SQL EXECUTE IMMEDIATE :command;
EXECUTE IMMEDIATE определен в стандарте SQL.