--- title: "PREPARE" id: ecpg-sql-prepare pg_version: "20devel" --- # PREPARE — prepare a statement for execution ## Synopsis ``` PREPARE prepared_name FROM string ``` ## Description `PREPARE` prepares a statement dynamically specified as a string for execution. This is different from the direct SQL statement [PREPARE](sql-prepare.md), which can also be used in embedded programs. The [EXECUTE](sql-execute.md) command is used to execute either kind of prepared statement. ## Parameters **`prepared_name`** An identifier for the prepared query. **`string`** A literal string or a host variable containing a preparable SQL statement, one of SELECT, INSERT, UPDATE, or DELETE. Use question marks (`?`) for parameter values to be supplied at execution. ## 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 a direct SQL `PREPARE` statement. 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 char *stmt = "SELECT * FROM test1 WHERE a = ? AND b = ?"; EXEC SQL ALLOCATE DESCRIPTOR outdesc; EXEC SQL PREPARE foo FROM :stmt; EXEC SQL EXECUTE foo USING SQL DESCRIPTOR indesc INTO SQL DESCRIPTOR outdesc; ## Compatibility `PREPARE` is specified in the SQL standard. ## See Also [EXECUTE](sql-execute.md)