EXECUTE IMMEDIATE
EXECUTE IMMEDIATE — динамически подготовить и выполнить оператор
Синтаксис
EXECUTE IMMEDIATE строка
Описание
EXECUTE IMMEDIATE
немедленно подготавливает и выполняет динамически задаваемый SQL-оператор, не получая при этом строки результата.
Параметры
строка
Строковая константа или переменная среды C, содержащая SQL-оператор, который нужно выполнить.
Примечания
Обычно в качестве строки
задаётся ссылка на переменную, содержащую динамически создаваемый SQL-оператор. Использовать здесь строковую константу не очень полезно; с тем же успехом можно написать непосредственно SQL-оператор, не добавляя лишнюю команду EXECUTE IMMEDIATE
.
Если вы всё же используете строковую константу, имейте в виду, что включаемые в SQL-оператор двойные кавычки нужно записывать в виде восьмеричной спецпоследовательности (\042
), а не в виде \"
, как принято в C. Это объясняется тем, что данная строка находится внутри блока EXEC SQL
, поэтому лексический анализатор ECPG разбирает её в соответствии с правилами SQL, а не C. Содержащиеся в этой строке символы обратной косой черты будут обработаны позже, по правилам C, но последовательность \"
сразу вызовет ошибку синтаксиса, так как она будет воспринята как завершающая строку.
Примеры
Пример выполнения оператора INSERT
с применением команды EXECUTE IMMEDIATE
и переменной среды С command
:
sprintf(command, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')"); EXEC SQL EXECUTE IMMEDIATE :command;
Совместимость
Команда EXECUTE IMMEDIATE
описана в стандарте SQL.
EXECUTE IMMEDIATE
EXECUTE IMMEDIATE — dynamically prepare and execute a statement
Synopsis
EXECUTE IMMEDIATE string
Description
EXECUTE IMMEDIATE
immediately prepares and executes a dynamically specified SQL statement, without retrieving result rows.
Parameters
string
A literal string or a host variable containing the SQL statement to be executed.
Notes
In typical usage, the string
is a host variable reference to a string containing a dynamically-constructed SQL statement. The case of a literal string is not very useful; you might as well just write the SQL statement directly, without the extra typing of EXECUTE IMMEDIATE
.
If you do use a literal string, keep in mind that any double quotes you might wish to include in the SQL statement must be written as octal escapes (\042
) not the usual C idiom \"
. This is because the string is inside an EXEC SQL
section, so the ECPG lexer parses it according to SQL rules not C rules. Any embedded backslashes will later be handled according to C rules; but \"
causes an immediate syntax error because it is seen as ending the literal.
Examples
Here is an example that executes an INSERT
statement using EXECUTE IMMEDIATE
and a host variable named command
:
sprintf(command, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')"); EXEC SQL EXECUTE IMMEDIATE :command;
Compatibility
EXECUTE IMMEDIATE
is specified in the SQL standard.