
# 执行SQL - ExecuteSqlStatement
#### 功能介绍
在指定的Session下执行SQL语句。用户可通过此接口执行SQL语句，输入为SQL语句、端点id、SQL Session id、绑定参数等信息，返回语句执行结果或语句id。此接口支持异步和同步两种执行模式，由入参is_sync参数决定。如果是异步执行，配套使用接口ShowSqlStatementResult查询语句结果。如果是同步执行，接口会等待一段时间接收结果，如果执行完毕会返回执行结果，如果没有执行完毕，会返回一个运行中状态，后续可以使用接口ShowSqlStatementResult查询语句结果。
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/DataArtsFabricEp/doc?api=ExecuteSqlStatement)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限。
- 如果使用角色与策略授权，具体权限要求请参见[权限和授权项](https://support.huaweicloud.com/api-fabric/dataartsfabric_03_0014.html)。
- 如果使用身份策略授权，需具备如下身份策略权限。
  
  | 授权项                                       | 访问级别  | 资源类型（\*为必须）  | 条件键                                                                                                                                                                                                                                                                                                                                                                                                                                        | 别名 | 依赖的授权项                                                                                                                                                                                                                                                                                                            |
  |:---|:---|:---|:---|:---|:---|
  | DataArtsFabric:workspace:executeStatement | Write | workspace \* | - g:ResourceTag/\<tag-key\>   - g:EnterpriseProjectId    | -  | - DataArtsFabric:workspace:list  - DataArtsFabric:endpoint:show   |
  | DataArtsFabric:workspace:executeStatement | Write | endpoint     | -                                                                                                                                                                                                                                                                                                                                                                                                                                          | -  | - DataArtsFabric:workspace:list  - DataArtsFabric:endpoint:show   |
     
  
 
#### URI
POST /v1/workspaces/{workspace_id}/sessions/statements
表1路径参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| workspace_id | 是    | String | **参数解释**：工作空间的ID。 **约束限制**：不涉及。 **取值范围**：长度为\[1,36\]的字母、数字、中划线(-)的组合。 **默认取值**：不涉及。 |
   
#### 请求参数
表2请求Header参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| X-Auth-Token | 否    | String | **参数解释**：租户token。 **约束限制**：不涉及。 **取值范围**：不涉及。 **默认取值**：不涉及。 |
   
表3请求Body参数 
| 参数                    | 是否必选 | 参数类型                     | 描述                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| statement             | 是    | String                   | **参数解释**：SQL statement信息。 **约束限制**：不涉及。 **取值范围**：\[0,10000000\]。 **默认取值**：不涉及。                               |
| limit                 | 否    | Integer                  | **参数解释**：limit限制。 **约束限制**：不涉及。 **取值范围**：不涉及。 **默认取值**：不涉及。                                                  |
| session_id            | 是    | String                   | **参数解释**：Session的ID。 **约束限制**：不涉及。 **取值范围**：长度为\[1,36\]的英文字符、数字和中划线(-)等特殊字符的组合。 **默认取值**：不涉及。                |
| bindings              | 否    | Array\<Array\<String\>\> | **参数解释**：参数绑定列表。 **约束限制**：不涉及。 **取值范围**：\[0,10000\]。 **默认取值**：不涉及。                                           |
| is_sync               | 否    | Boolean                  | **参数解释**：同步执行或异步执行。 **约束限制**：不涉及。 **取值范围**：true：同步，false：异步。 **默认取值**：不涉及。                                   |
| is_maintain_statement | 否    | Boolean                  | **参数解释**：是否来自运维通道。 **约束限制**：不涉及。 **取值范围**：true：运维通道语句，false：不是运维通道语句。 **默认取值**：不涉及。                          |
| resultset_fetch_mode  | 否    | String                   | **参数解释**：获取结果集的方式。 **约束限制**：不涉及。 **取值范围**：DEFAULT：直接返回结果集；READ_OBS：返回结果集在桶上的路径，而不是直接返回结果集。 **默认取值**：DEFAULT。 |
   
#### 响应参数
**状态码：200**
表4响应Body参数 
| 参数 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|
| -  | String | 执行SQL的响应信息，String格式，可见下方响应示例。 **异步或同步执行超时执行结果** **StatementResponse** - **status**（Integer） --- 请求整体执行状态  | **值** | **含义**    | |:---|:---| | 0     | 成功        | | -1    | 失败        | | 1     | 执行中       | | 2     | 执行完成但无结果集 | | 3     | 排队等待中     | | 4     | 语句未正常执行   |    - **session_id**（String, UUID） --- 当前执行会话唯一标识   - **statement_id**（String, UUID） --- 本次语句执行唯一标识    **同步执行正常返回结果** **StatementResponse** - **status**（Integer） --- 请求整体执行状态  | **值** | **含义**    | |:---|:---| | 0     | 成功        | | -1    | 失败        | | 1     | 执行中       | | 2     | 执行完成但无结果集 | | 3     | 排队等待中     | | 4     | 语句未正常执行   |    - **session_id**（String, UUID） --- 当前执行会话唯一标识   - **statement_id**（String, UUID） --- 本次语句执行唯一标识   - **results**（Array of StatementResult objects） --- 每条SQL执行结果    **StatementResult** - **status**（String） --- SQL执行状态  | **值**             | **含义**    | |:---|:---| | PGRES_TUPLES_OK   | 查询成功并含结果集 | | PGRES_COMMAND_OK  | 执行成功无结果   | | PGRES_FATAL_ERROR | 执行失败      |    - **statement_id**（String） --- 语句ID   - **num_rows**（Integer） --- 查询结果总行数   - **row_count**（Integer） --- 当前页实际返回行数   - **page_no**（Integer） --- 当前页码   - **page_count**（Integer） --- 总页数   - **err_code**（String） --- 错误码，0表示无错误，其他数值参见错误信息   - **sql_state**（String） --- SQL状态码   - **message**（String） --- 执行信息或错误详情   - **result_set**（Object, type: StatementResultSet） --- 仅查询成功时含有效数据，否则为空结构    **StatementResultSet** - **columns**（Array of RowType objects） --- 列元数据列表   - **rows**（Array of String arrays） --- 实际数据行，每行顺序与columns对应    **RowType** - **name**（String） --- 列名   - **table_id**（Integer） --- 表的ID   - **colunm_id**（Integer） --- 列的ID   - **format**（Integer） --- 格式   - **type**（Integer） --- PG类型OID   - **size**（Integer） --- 大小   - **type_mod**（Integer） --- typemod    |
   
**状态码：400**
表5响应Body参数 
| 参数           | 参数类型   | 描述                                                                                                                                                                                                                  |
|:---|:---|:---|
| error_code   | String | **参数解释**：错误码。 **约束限制**：不涉及。 **取值范围**：长度\[8,36\]。 **默认取值**：不涉及。      |
| error_msg    | String | **参数解释**：错误描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。   |
| solution_msg | String | **参数解释**：解决方案描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。 |
   
**状态码：401**
表6响应Body参数 
| 参数           | 参数类型   | 描述                                                                                                                                                                                                                  |
|:---|:---|:---|
| error_code   | String | **参数解释**：错误码。 **约束限制**：不涉及。 **取值范围**：长度\[8,36\]。 **默认取值**：不涉及。      |
| error_msg    | String | **参数解释**：错误描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。   |
| solution_msg | String | **参数解释**：解决方案描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。 |
   
**状态码：404**
表7响应Body参数 
| 参数           | 参数类型   | 描述                                                                                                                                                                                                                  |
|:---|:---|:---|
| error_code   | String | **参数解释**：错误码。 **约束限制**：不涉及。 **取值范围**：长度\[8,36\]。 **默认取值**：不涉及。      |
| error_msg    | String | **参数解释**：错误描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。   |
| solution_msg | String | **参数解释**：解决方案描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。 |
   
**状态码：408**
表8响应Body参数 
| 参数           | 参数类型   | 描述                                                                                                                                                                                                                  |
|:---|:---|:---|
| error_code   | String | **参数解释**：错误码。 **约束限制**：不涉及。 **取值范围**：长度\[8,36\]。 **默认取值**：不涉及。      |
| error_msg    | String | **参数解释**：错误描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。   |
| solution_msg | String | **参数解释**：解决方案描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。 |
   
**状态码：500**
表9响应Body参数 
| 参数           | 参数类型   | 描述                                                                                                                                                                                                                  |
|:---|:---|:---|
| error_code   | String | **参数解释**：错误码。 **约束限制**：不涉及。 **取值范围**：长度\[8,36\]。 **默认取值**：不涉及。      |
| error_msg    | String | **参数解释**：错误描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。   |
| solution_msg | String | **参数解释**：解决方案描述。 **约束限制**：不涉及。 **取值范围**：长度\[2,4096\]。 **默认取值**：不涉及。 |
   
#### 请求示例
在指定的Session下执行SQL语句。用户可通过此接口执行SQL语句，输入为SQL语句、端点id、SQL Session id、绑定参数等信息，返回语句执行结果或语句id。此接口支持异步和同步两种执行模式，由入参is_sync参数决定。如果是异步执行，配套使用接口ShowSqlStatementResult查询语句结果。如果是同步执行，接口会等待一段时间接收结果，如果执行完毕会返回执行结果，如果没有执行完毕，会返回一个运行中状态，后续可以用使用接口ShowSqlStatementResult查询语句结果。
```
POST https://endpoint/v1/workspaces/{workspace_id}/sessions/statements
{
  "statement" : "select * from aaa",
  "limit" : 100,
  "session_id" : "string",
  "bindings" : [ [ "string" ] ],
  "is_maintain_statement" : false,
  "resultset_fetch_mode" : "DEFAULT",
  "is_sync" : true
}
```
#### 响应示例
**状态码：200**
OK
```
{
  "status" : 1,
  "session_id" : "6399466e-8908-4c9d-8399-48479c8b06f7",
  "statement_id" : "49131d25-1824-4f29-860c-832bdd19dfd3"
}
```
**状态码：400**
BadRequest
```
{
  "error_code" : "common.01000001",
  "error_msg" : "failed to read http request, please check your input, code: 400, reason: Type mismatch., cause: TypeMismatchException"
}
```
**状态码：401**
Unauthorized
```
{
  "error_code" : "APIG.1002",
  "error_msg" : "Incorrect token or token resolution failed"
}
```
**状态码：403**
Forbidden
```
{
  "error" : {
    "code" : "403",
    "message" : "X-Auth-Token is invalid in the request",
    "title" : "Forbidden"
  },
  "error_code" : 403,
  "error_msg" : "X-Auth-Token is invalid in the request",
  "title" : "Forbidden"
}
```
**状态码：404**
NotFound
```
{
  "error_code" : "common.01000001",
  "error_msg" : "response status exception, code: 404"
}
```
**状态码：408**
Request Time-out
```
{
  "error_code" : "common.00000408",
  "error_msg" : "timeout exception occurred"
}
```
**状态码：500**
InternalServerError
```
{
  "error_code" : "common.00000500",
  "error_msg" : "internal error"
}
```
#### 状态码
| 状态码 | 描述                  |
|:---|:---|
| 200 | OK                  |
| 400 | BadRequest          |
| 401 | Unauthorized        |
| 403 | Forbidden           |
| 404 | NotFound            |
| 408 | Request Time-out    |
| 500 | InternalServerError |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-fabric/dataartsfabric_03_0028.html)。
