(MySQL)存储过程 - 循环结果

时间:2013-08-05 02:18:24

标签: mysql loops stored-procedures iteration

我们正在从PostgreSQL迁移和应用到MySQL 基本上,我想在MySQL中循环结果。

SELECT col1 FROM table1;< ---(1)从此查询中获取结果。

LOOP THROUGH col1Result

SELECT myCol FROM table2 WHERE thisCol = col1Result< ---等于上一个查询的每个结果。

END LOOP;

我也找到了这个参考文献 http://dev.mysql.com/doc/refman/5.0/en/cursors.html
但是,我坚持这条线。

FETCH cur1 INTO a, b;

这不会将cur1的每个结果都变为变量ab吗? 我如何确保我目前处于变量a的第一个索引?
这是一个关于如何在我的结尾使用结果的例子(写在PostgreSQL中)。

FOR my_record IN

   SELECT DISTINCT col1
   FROM            table1
   WHERE           col2 = param1;

LOOP

   SELECT DISTINCT col4
   FROM            table2
   WHERE           col3 = my_record.col1;

   IF true THEN
      RAISE EXCEPTION '%', 'ERROR MESSAGE' || my_record.col1;
   END IF

   SELECT DISTINCT col5
   FROM            table3
   WHERE           col6 = my_record.col1;

   IF true THEN
      RAISE EXCEPTION '%', ERROR MESSAGE' || my_record.col1;
   END IF;

END LOOP;

2 个答案:

答案 0 :(得分:3)

cur1会读取每行的结果。每次循环它都会得到下一行。所以它第一次循环就会得到第一行。 这将一直持续到循环中断或没有更多行可用(在这种情况下会出现无数据条件。

有关详情,请参阅this。希望它有所帮助。

答案 1 :(得分:1)

为什么在使用连接进行处理时会使用循环?

select mycol
from table2 t2 join
     table1 t1
     on t1.col1 = t2.thiscol;

这适用于Postgres和MySQL。