# SQL Prepare

>         PREPARE <identifier> AS <select-query>

> The `prepare` statement makes it possible to create a SQL statement that will be executed multiple times. Used together with the `execute` statement, this saves processor time by eliminating the statement compilation step each time the statement is executed.

> The `<identifier>` specifies the name of the prepared statement. Parameters in the query are represented using "`?`" placeholders; for example:

>         prepare lookup as select * from t where x=?;

> All parameters are assumed to have type `string` unless explicitly type cast. For example, the following statement allows substituting an `integer` value into the query string:

>         prepare lookup as select * from t where x=?::integer;

> The following example statements demonstrate defining and using prepared statements:

>         create table t(x integer primary key, y integer);
>         prepare lookup as select * from t where x=?::integer;

>         prepare lookup2 as select * from t where x=?::integer and y=?::integer;

>         insert into t values (1,10);
>         execute lookup(1);
>         explain execute lookup(1);
>         execute lookup2(1,10);
>         explain execute lookup2(1,10);
>         prepare selfjoin as select * from t as t1 left join t as t2 on t1.y=t2.y;

>         execute selfjoin();
>         explain execute selfjoin();
>         execute selfjoin();