sql >> データベース >  >> RDS >> Mysql

ストアドプロシージャのループでのカーソルの使用

    BEGIN ... ENDにカーソルをネストすることで、やりたいことができます。 ブロック。 RolandBoumanの「NestingMySQLCursorLoops」 を参照してください。 詳細については記事をご覧ください。ネストされたカーソルを実行する代わりにクエリを書き直すことができる場合が多いため、この手法についての彼のコメントはしばしば不要であることに注意する価値があるかもしれません。

    それでもカーソルをループにネストする必要がある場合、コードは次のようになります。

    increment: LOOP
        block_cursor: BEGIN
            DECLARE cur1 CURSOR FOR SELECT person_id, publication_id  FROM p_publication WHERE person_id = new_count;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
            OPEN cur1;
            REPEAT
                FETCH cur1 INTO pub_id, per_id;
                IF NOT done THEN
                    INSERT INTO test.t2 VALUES (pub_id, per_id);
                END IF;
                SET new_count = new_count + 1;
            UNTIL done END REPEAT;
            CLOSE cur1;
            IF !(new_count < old_count ) THEN
                LEAVE increment;
            END IF;
        END block_cursor;
    END LOOP increment;
    



    1. MyBatisの1対多の関係

    2. Oracle .Net ManagedDataAccessエラー:タイプ「OracleInternal.Common.ConfigBaseClass」をアセンブリからロードできませんでした

    3. SQLServerの一時テーブルの概要

    4. 週番号から週の開始日と終了日を取得します