
# 执行SQL语句
通过连接对象，使用[PQexec](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-42-0152.html#ZH-CN_TOPIC_0000002235458749)函数执行SQL查询语句。可以执行各种类型的SQL查询，例如SELECT查询、插入数据、更新数据、删除数据等。但如果同时执行多个SQL语句作为一个事务，应该使用事务控制功能，例如执行BEGIN、COMMIT、ROLLBACK 等SQL语句来控制事务的开始、提交和回滚。同时也需要注意执行SQL查询后的错误处理。
示例如下（完整示例请参考[数据库建连、执行SQL并返回结果](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-42-1533.html#ZH-CN_TOPIC_0000002235338809)）：
```
/*
 * 连接成功后
 * 测试实例涉及游标的使用时候必须使用事务块
 * 把全部放在一个  "select * from pg_database"
 * PQexec() 里，过于简单，不推荐使用
 */
/* 开始一个事务块 */
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
    fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
}
/*
 * 在结果不需要的时候PQclear PGresult，以避免内存泄漏
 */
PQclear(res);
/*
 * 从系统表 pg_database（数据库的系统目录）里抓取数据
 */
res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
    fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
}
PQclear(res);
res = PQexec(conn, "FETCH ALL in myportal");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
    fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
}
```
