Skip to content

Instantly share code, notes, and snippets.

@yukihirai0505
Last active February 21, 2016 03:12
Show Gist options
  • Save yukihirai0505/c8e100b41760740ca668 to your computer and use it in GitHub Desktop.
Save yukihirai0505/c8e100b41760740ca668 to your computer and use it in GitHub Desktop.
指定日から1ヶ月分のデータを動的に作成するストアドプロシージャ
/* ストアドプロシージャを使用したい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