川猪 2014-02-18 16:40
浏览 1142

MYSQL游标REPEAT循环后,无法得到字符串返回值。望指教,谢谢!

我有一个数据表zq

+-------+--------+--------------+---------+---------+--------+---------+
| zq_id | zq_dm  | zq_mc        | zqlx_id | fllx_id | jys_id | zq_cxhq |
+-------+--------+--------------+---------+---------+--------+---------+
|     1 | 000001 | 平安银行     |       4 |       9 |      1 |       1 |
|     2 | 113001 | 中行转债     |       4 |       9 |      1 |       1 |
|     3 | 113005 | 平安转债     |       4 |       9 |      1 |       1 |
|     4 | 131800 | R-003        |       3 |       5 |      2 |       0 |
|     5 | 131801 | R-007        |       3 |       7 |      2 |       0 |
|     6 | 131802 | R-014        |       3 |       8 |      2 |       0 |
|     7 | 131809 | R-004        |       3 |       6 |      2 |       0 |
|     8 | 131810 | R-001        |       3 |       3 |      2 |       1 |
|     9 | 131811 | R-002        |       3 |       4 |      2 |       0 |
|    10 | 150124 | 建信50B      |       5 |      10 |      2 |       0 |
|    11 | 510300 | 300ETF       |       2 |       2 |      1 |       0 |
|    12 | 600893 | 航空动力     |       1 |       1 |      1 |       0 |
|    13 | 601318 | 中国平安     |       1 |       1 |      1 |       1 |
|    14 | 601872 | 招商轮船     |       1 |       1 |      1 |       1 |
+-------+--------+--------------+---------+---------+--------+---------+

还有一个数据表jys

+--------+--------+-----------------------+
| jys_id | jys_dm | jys_mc                |
+--------+--------+-----------------------+
|      1 | SH     | 上海证券交易所        |
|      2 | SZ     | 深圳证券交易所        |
+--------+--------+-----------------------+

我想将表zq中字段zq_cxhq为1的记录的zq_dm字段和对应的jys_dm提取出来组成字符串,所期望的结果应该是得到字符串"SH000001,SH113001,SH113005,SZ131810,SH601318,SH601872,"。

我的方法是:

CREATE DEFINER=`root`@`localhost` PROCEDURE `routine_Sshq`(
  OUT jyszqdm VARCHAR(100)
)
BEGIN
  DECLARE zqdm VARCHAR(45);  
  DECLARE jysdm VARCHAR(45);
  DECLARE jyszq VARCHAR(100);
  DECLARE done TINYINT(1) DEFAULT 0;

  DECLARE cur_zqhq
  CURSOR FOR SELECT zq_dm, jys_dm
    FROM zq
    LEFT JOIN jys
    ON jys.jys_id = zq.jys_id
    WHERE zq_cxhq = 1;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

  OPEN cur_zqhq;
  REPEAT
    FETCH cur_zqhq INTO zqdm, jysdm;
    IF done = 0 THEN
      SET jyszq = CONCAT(jyszq, jysdm, zqdm, ',');
    END IF;
  UNTIL done = 1 END REPEAT;
  SET jyszqdm  = jyszq;
END

在DELPHI XE2中,我将这个存储过程的返回值,赋值给Edit控件,但始终无法成功。
我将这个存储过程的最后一行改为: SET jyszqdm = 'abc'; 同样无法成功。
我怀疑是不是前面那个REPEAT循环没有结束?但又找不到原因。

本人是自学菜鸟,期望哪位前辈高手指教。万分感谢。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 易语言把MYSQL数据库中的数据添加至组合框
    • ¥20 求数据集和代码#有偿答复
    • ¥15 关于下拉菜单选项关联的问题
    • ¥20 java-OJ-健康体检
    • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
    • ¥15 使用phpstudy在云服务器上搭建个人网站
    • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
    • ¥15 vue3+express部署到nginx
    • ¥20 搭建pt1000三线制高精度测温电路
    • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况