Last active
February 21, 2016 03:12
-
-
Save yukihirai0505/c8e100b41760740ca668 to your computer and use it in GitHub Desktop.
指定日から1ヶ月分のデータを動的に作成するストアドプロシージャ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* ストアドプロシージャを使用したいDBを選択 */ | |
USE [データベース名]; | |
/* 今回使用したいストアドプロシージャの名前(初めて作成するときはいらない) */ | |
DROP procedure IF EXISTS `[プロシージャ名]`; | |
/************************ | |
通常のSQLだと「;(セミコロン)」でSQLの区切りを意味しているが今回はそれを「$$」に変えますよという意味。 | |
これを使用することでSQLを一気に終端の$$まで実行することができる。 | |
*************************/ | |
DELIMITER $$ | |
USE [テーブル名]$$ | |
/* ストアドプロシージャを使用するユーザーとホストを指定して、今回使用したいストアドプロシージャの名前を設定する。 */ | |
CREATE DEFINER=`[ユーザー名]`@`[ホスト名]` PROCEDURE `[プロシージャ名]`(IN targetDate date) | |
BEGIN | |
/************************ | |
指定日から1ヶ月分のデータを生成 | |
*************************/ | |
SET @fromDate = targetDate; | |
SET @toDate = ((targetDate + interval 1 month) + interval - 1 day ); | |
SET @counter = 1; | |
SET @insertTmp = ""; | |
while @toDate >= @fromDate do | |
/* SQLを動的に作成する */ | |
SET @insertTmp = CONCAT("INSERT INTO event VALUES (", @i, ",'",@fromDate, "'"); | |
SET @insertTmp = CONCAT(@insertTmp, ")"); | |
/* 動的に作成したSQLを実行する */ | |
PREPARE stmt FROM @insertTmp; | |
EXECUTE stmt; | |
DEALLOCATE PREPARE stmt; | |
/*日付、カウンターをインクリメント*/ | |
SET @fromDate = DATE_ADD(@fromDate, interval 1 day); | |
SET @counter = @counter + 1; | |
END WHILE; | |
SELECT * FROM event; | |
END | |
$$ | |
DELIMITER ; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment