2013-08-05 23 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; 

はそれが変数にcur1abのすべての単一の結果を得ることはありませんか? 現在、変数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

もう一度Mr. 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

このコメントボックス内の文字数が超過していますので、私の編集をご覧ください。 –

関連する問題