アプリの開発中、データベースにテストデータを大量に挿入したいときってありますよね。
そんなときに活躍するのが「ストアドプロシージャ」です。
ここでは、「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;
コメント