# PREPARE
#### 功能描述
创建一个预备语句。
预备语句是服务端的对象，可以用于优化性能。在执行PREPARE语句的时候，指定的查询被解析、分析、重写。当随后发出EXECUTE语句的时候，预备语句被规划和执行。这种设计避免了重复解析、分析工作。PREPARE语句创建后在整个数据库会话期间一直存在，一旦创建成功，即便是在事务块中创建，事务回滚，PREPARE也不会删除。只能通过显式调用[DEALLOCATE](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0246.html)进行删除，会话结束时，PREPARE也会自动删除。
#### 注意事项
无。
#### 语法格式
```
PREPARE name [ ( data_type [, ...] ) ] AS statement;
```
#### 参数说明
表1PREPARE参数说明 
| 参数          | 描述                         | 取值范围                                     |
|:---|:---|:---|
| name        | 指定预备语句的名称。该名称必须在该会话中是唯一的。 | 字符串。                                     |
| data_type | 参数的数据类型。                   | -                                        |
| statement  | 可以执行的SQL语句。               | 任何SELECT INSERT、UPDATE、DELETE或VALUES语句。 |
   
- **name**
  指定预备语句的名称。该名称必须在该会话中是唯一的。
  
- **data_type**
  参数的数据类型。
  
- **statement**
  任何SELECT INSERT、UPDATE、DELETE或VALUES语句。
  
 
#### 示例
准备数据。
```
DROP TABLE IF EXISTS reason_t1;
CREATE TABLE reason_t1 (
    r_reason_sk    integer,      
    r_reason_id    character(16),  
    r_reason_desc  character(100)  
);
```
为一个INSERT语句创建一个预备语句，然后执行它：
```
PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO reason_t1 VALUES($1,$2,$3); 
EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52');
```
#### 相关链接
[DEALLOCATE](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0246.html)
