罗耀斌 发表于 3 天前

【10.0.3】存储过程多个结果集


执行存储过程时有多个结果集,


但直接执行的话只会返回默认第一个,有没办法获取到两个结果集?

小熊熊 发表于 3 天前

有一种办法就是利用游标,在遍历多个结果集期间,每个获取的值都会被追加到 result 字符串中,每个值之间用逗号分隔。最后,存储过程会关闭游标并返回 result 字符串,然后你在处理这个字符串就好啦,不知道官方有什么好办法没。


DELIMITER $

CREATE PROCEDURE GetArray2()
BEGIN
    DECLARE result VARCHAR(1000);
    DECLARE row_value INT;

    DECLARE done INT DEFAULT FALSE;
    DECLARE my_cursor CURSOR FOR SELECT id FROM student;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN my_cursor;

    set result := '';

    get_rows: LOOP
      FETCH my_cursor INTO row_value;
      IF done THEN
            LEAVE get_rows;
      END IF;

      IF result != '' THEN
            SET result = CONCAT(result, ',', row_value);
      ELSE
            SET result = CAST(row_value AS CHAR);
      END IF;
    END LOOP get_rows;

    CLOSE my_cursor;

    SELECT result;
END$

DELIMITER ;




罗耀斌 发表于 3 天前

小熊熊 发表于 2024-6-26 12:59
有一种办法就是利用游标,在遍历多个结果集期间,每个获取的值都会被追加到 result 字符串中,每个值之间用 ...

这种脱离便利性了,两个表格多的时候单表就有1000多条数据,7列。两个表格不得了。字符串恐怕都超长。只能看看官方有没更加便利的方法

Shawn.Liu 发表于 3 天前

大佬这边外联库是SQL Server吗,可能存在不同数据库类型的存储过程返回的数据集个数不一致,Oracle或者MySQL的存储过程返回单个数据集,所以产品在调用存储过程时并不清楚我们外联库存储过程会返回多少个数据集,看下大佬这边能否修改下您外联库中的存储过程语句使得每次调用时返回单个数据集,或者您在产品需求板块发个帖子评估一下。

小熊熊 发表于 3 天前

罗耀斌 发表于 2024-6-26 16:21
这种脱离便利性了,两个表格多的时候单表就有1000多条数据,7列。两个表格不得了。字符串恐怕都超长。只 ...

确实勉强能实现不过返回多个数据集应该是很常见的场景。

Shawn.Liu 发表于 前天 16:36

{:5_114:}
页: [1]
查看完整版本: 【10.0.3】存储过程多个结果集