
# 执行带有结果集的语句
执行具有单独结果集的SQL语句，可以使用EXECUTE。若要保存结果，则增加INTO子句。示例如下：
```
EXEC SQL BEGIN DECLARE SECTION;
    const char *stmt = "SELECT a, b, c FROM test1 WHERE a > ?";
    int v1, v2;
    VARCHAR v3[50];
EXEC SQL END DECLARE SECTION;
    EXEC SQL PREPARE mystmt FROM :stmt;
    ...
    EXEC SQL EXECUTE mystmt INTO :v1, :v2, :v3 USING 37;
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
EXECUTE命令支持INTO子句和USING子句。
如果一个查询可能返回多个结果行，则应使用游标，游标详情请参见[使用游标](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0177.html#ZH-CN_TOPIC_0000002559105561)章节，示例如下：
```
EXEC SQL BEGIN DECLARE SECTION; 
    char dbaname[128]; 
    char datname[128]; 
    char *stmt = "SELECT u.usename as dbaname, d.datname "      
                 "  FROM pg_database d, gs_user u "     
                 "  WHERE d.datdba = u.usesysid"; 
EXEC SQL END DECLARE SECTION;  
    EXEC SQL CONNECT TO testdb AS con1 USER testuser;  
    EXEC SQL PREPARE stmt1 FROM :stmt;  
    EXEC SQL DECLARE cursor1 CURSOR FOR stmt1; 
    EXEC SQL OPEN cursor1;  
    EXEC SQL WHENEVER NOT FOUND DO BREAK;  
    while (1) 
    {     
        EXEC SQL FETCH cursor1 INTO :dbaname,:datname;
        printf("dbaname=%s, datname=%s\n", dbaname, datname); 
    }  
    EXEC SQL CLOSE cursor1;  
    EXEC SQL COMMIT; 
    EXEC SQL DISCONNECT ALL;
```
