2013-08-05 171 views
5

循环我们要迁移和应用和PostgreSQL到MySQL。
基本上,我想循环遍历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; 

回答

3

cur1会读取每一行的结果。每次循环它都会得到下一行。所以第一次循环它会得到第一行。 这将继续下去,直到循环中断或没有更多的行可(在这种情况下,无数据情况发生。

this更多。希望它能帮助。

+0

你好Woofmeow,谢谢。我会尝试在特定链接中给出的示例。 –

+0

您的欢迎@MichaelArdan。如果(它有帮助)把它作为正确的答案加以提升,那么它也可以帮助别人;别问更多; :) – woofmeow

+0

你好再次Woofmeow先生。我想知道在给出的例子中'完成'是做什么的。我尝试了示例过程,最后出现错误消息:错误代码:1054.“字段列表”中未知列'已完成'。 –

1

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

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

这适用于Postgres和MySQL。

+0

嗨戈登,感谢您的反馈和建议。查看当前的过程,第一个SELECT语句的列将由至少26行组成,其中包括多个JOIN和WHERE子句,该特定SELECT语句的结果将在整个循环中使用程序多次。这将是苛刻的,我维护的程序,如果我是每次我需要的结果。 –

+0

由于字符在此评论框超出,请参阅我的编辑数量的时间来执行SELECT语句。 –