华为云云数据库GaussDB执行带有结果集的语句_云淘科技

执行具有单独结果集的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;

EXECUTE命令支持INTO子句和USING子句。

如果一个查询可能返回多个结果行,则应使用游标,游标详情可参考使用游标章节,示例如下:

EXEC SQL BEGIN DECLARE SECTION; 
    char dbaname[128]; 
    char datname[128]; 
    char *stmt = "SELECT u.usename as dbaname, d.datname "      
                 "  FROM pg_database d, pg_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
", dbaname, datname); 
    }  
    EXEC SQL CLOSE cursor1;  

    EXEC SQL COMMIT; 
    EXEC SQL DISCONNECT ALL;

父主题: 执行动态SQL语句

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家