暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GaussDB数据库-执行动态SQL语句:执行带有结果集的语句

CY 学数据库 2023-10-25
109

执行具有单独结果集的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\n", dbaname, datname); 
    }  
    EXEC SQL CLOSE cursor1;  

    EXEC SQL COMMIT; 
    EXEC SQL DISCONNECT ALL;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\n", dbaname, datname); 
    }  
    EXEC SQL CLOSE cursor1;  

    EXEC SQL COMMIT; 
    EXEC SQL DISCONNECT ALL;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论