【MySQL、Postgres】100回繰り返すストアドプロシージャのサンプルコード

アプリの開発中、データベースにテストデータを大量に挿入したいときってありますよね。

そんなときに活躍するのが「ストアドプロシージャ」です。

ここでは、「100回ループさせ、数値や日時の変数を一定のスパンで増やしていく」という処理を持ったプロシージャの雛形を紹介します。

必要に応じてINSERT文を追加したり、変数を追加したり、削除したりして、自分の使いやすいものにアレンジしてみてください。

100回ループするストアドプロシージャのサンプル(MySQL版)

100回ループし、
変数”numTemp”を1ずつ増やし、
変数”dateTimeTemp”を1日ずつ増やす

という処理を持ったストアドプロシージャです。

/* 同名のプロシージャがあれば削除しておく */
DROP PROCEDURE IF EXISTS test1;

DELIMITER //
CREATE PROCEDURE test1() 
BEGIN
    /* ループする回数(100回繰り返す) */
    declare loopCount int DEFAULT 100; 
    /* ループカウント変数 */
    declare l int DEFAULT 0;

    /* 1ずつ増えていく変数 */
    declare numTemp int DEFAULT 0;
    /* 2020年1月1日から、1日ずつ増えていく変数 */
    declare dateTimeTemp TIMESTAMP DEFAULT '2020/01/01';

    while l < loopCount do
        /* ここにinsert文などを記載 */

        /* 変数の操作 */
        set numTemp = numTemp + 1;
        set dateTimeTemp = dateTimeTemp + INTERVAL 1 DAY;
        
        /* ループカウント変数の操作 */
        set l = l + 1;
    end while;

END;
//
DELIMITER ;

/* プロシージャを実行 */
CALL test1();

/* プロシージャを削除 */
DROP PROCEDURE test1;

100回ループするストアドプロシージャのサンプル(PostgreSQL版)

100回ループし、
変数”numTemp”を1ずつ増やし、
変数”dateTimeTemp”を1日ずつ増やし、
各変数の値をターミナルに出力する

という処理を持ったストアドプロシージャです。

CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  -- 変数の定義
  loopCount int;
  dateTimeTemp timestamp;
  numTemp int;
BEGIN
  -- 変数の初期化
  loopCount:= 100;
  numTemp = 0;
  dateTimeTemp = '2020/01/01 00:00:00.000';

  -- ループ処理
  FOR i IN 1..loopCount LOOP

    -- ここにinsert文などを記載
  
    -- 変数の操作
    numTemp = numTemp + 1;
    dateTimeTemp = dateTimeTemp + cast( '1 days' as INTERVAL );
    
    -- ターミナルに変数の値を出力
    RAISE INFO '%',numTemp;
    RAISE INFO '%',dateTimeTemp;
  
  END LOOP;
  END;
$$
LANGUAGE plpgsql;

/* プロシージャを実行 */
CALL test1();

/* プロシージャを削除 */
DROP PROCEDURE test1;

コメント

タイトルとURLをコピーしました