找回密码
 立即注册

QQ登录

只需一步,快速开始

罗耀斌
金牌服务用户   /  发表于:2024-6-26 11:27  /   查看:760  /  回复:5
1金币

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


但直接执行的话只会返回默认第一个,有没办法获取到两个结果集?
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

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

5 个回复

倒序浏览
最佳答案
最佳答案
Shawn.Liu活字格认证
超级版主   /  发表于:2024-6-26 11:27:28
来自 4#
大佬这边外联库是SQL Server吗,可能存在不同数据库类型的存储过程返回的数据集个数不一致,Oracle或者MySQL的存储过程返回单个数据集,所以产品在调用存储过程时并不清楚我们外联库存储过程会返回多少个数据集,看下大佬这边能否修改下您外联库中的存储过程语句使得每次调用时返回单个数据集,或者您在产品需求板块发个帖子评估一下。
回复 使用道具 举报
小熊熊
注册会员   /  发表于:2024-6-26 12:59:56
2#
有一种办法就是利用游标,在遍历多个结果集期间,每个获取的值都会被追加到 result 字符串中,每个值之间用逗号分隔。最后,存储过程会关闭游标并返回 result 字符串,然后你在处理这个字符串就好啦,不知道官方有什么好办法没。


  1. DELIMITER $

  2. CREATE PROCEDURE GetArray2()
  3. BEGIN
  4.     DECLARE result VARCHAR(1000);
  5.     DECLARE row_value INT;

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

  9.     OPEN my_cursor;

  10.     set result := '';

  11.     get_rows: LOOP
  12.         FETCH my_cursor INTO row_value;
  13.         IF done THEN
  14.             LEAVE get_rows;
  15.         END IF;

  16.         IF result != '' THEN
  17.             SET result = CONCAT(result, ',', row_value);
  18.         ELSE
  19.             SET result = CAST(row_value AS CHAR);
  20.         END IF;
  21.     END LOOP get_rows;

  22.     CLOSE my_cursor;

  23.     SELECT result;
  24. END$

  25. DELIMITER ;
复制代码





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
罗耀斌
金牌服务用户   /  发表于:2024-6-26 16:21:32
3#
小熊熊 发表于 2024-6-26 12:59
有一种办法就是利用游标,在遍历多个结果集期间,每个获取的值都会被追加到 result 字符串中,每个值之间用 ...

这种脱离便利性了,两个表格多的时候单表就有1000多条数据,7列。两个表格不得了。字符串恐怕都超长。只能看看官方有没更加便利的方法
回复 使用道具 举报
小熊熊
注册会员   /  发表于:2024-6-26 19:26:28
5#
罗耀斌 发表于 2024-6-26 16:21
这种脱离便利性了,两个表格多的时候单表就有1000多条数据,7列。两个表格不得了。字符串恐怕都超长。只 ...

确实  勉强能实现  不过返回多个数据集应该是很常见的场景。
回复 使用道具 举报
Shawn.Liu活字格认证
超级版主   /  发表于:2024-6-27 16:36:57
6#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部