
# PQexec
#### 功能描述
向服务器提交一条命令并等待结果。
#### 原型
```
PGresult* PQexec(PGconn* conn, const char* query);
```
#### 参数
表1PQexec参数 
| **关键字** | **参数说明**     |
|:---|:---|
| conn    | 指向包含连接的对象指针。 |
| query   | 需要执行的查询字符串。  |
   
#### 返回值
PGresult：包含查询结果的对象指针。
#### 注意事项
应该调用PQresultStatus函数来检查任何错误的返回值（包括空指针的值，在这种情况下它将返回PGRES_FATAL_ERROR）。使用PQerrorMessage获取有关错误的更多信息。
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
命令字符串可以包括多个SQL命令（用分号分隔）。在一个PQexec调用中发送的多个查询是在一个事务里处理的，除非在查询字符串里有明确的BEGIN/COMMIT命令把整个字符串分隔成多个事务。请注意，返回的PGresult结构只描述字符串里执行的最后一条命令的结果，如果有一个命令失败，那么字符串处理的过程就会停止，并且返回的PGresult会描述错误条件。
PQexec函数对普通的同步应用里提交命令已经足够使用。但是它却有几个缺陷，而这些缺陷可能对某些用户很重要。
- PQexec等待命令结束，而应用可能还有其它的工作要做（比如维护用户界面等），此时并不希望PQexec阻塞应用。
  
- 因为客户端应用在等待结果的时候是处于挂起状态的，所以应用很难判断它是否该尝试结束正在进行的命令。
  
- PQexec只能返回一个PGresult结构。如果提交的命令字符串包含多个SQL命令，除了最后一个PGresult以外都会被PQexec丢弃。
  
- PQexec总是收集命令的整个结果，将其缓存在一个PGresult中。虽然这为应用简化了错误处理逻辑，但是对于包含多行的结果是不切实际的。
  
不想受到这些限制的应用可以改用如下函数，也是构造PQexec的函数：
PQsendQuery和PQgetResult。PQsendQueryParams、PQsendPrepare、PQsendQueryPrepared也可以和PQgetResult一起使用。
#### 示例
请参见[典型应用开发示例](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0179.html)章节。
