Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

テストデータ作成時に便利なストアドファンクション

$
0
0
JUGEMテーマ:コンピュータ


この記事は MySQL Casual Advent Calendar 2013 の 13 日目です。

カジュアル! ということで、テストデータ作成時にいつも'AAAA'ばかりでは辛いので、MySQLで利用できる10行ほどのストアドファンクションをご紹介します。

拙書「プロになるためのデータベース技術入門」p.223では「それっぽい」苗字を返すrand_family_nameという以下のファンクションを紹介しました。

delimiter $
create function rand_family_name() returns varchar(10)
begin
declare v_family_name varchar(10) default '小笠原';
declare v_f1,v_f2 varchar(5);
set v_f1=mid('佐鈴田畑山池石川渡高大中小伊斉加吉井清松竹梅木林森長橋内外金',FLOOR(1 + RAND()*30),1);
set v_f2=mid('藤本辺畑橋村田川上水中口島崎井清松竹梅木林森内外金野原塚部池',FLOOR(1 + RAND()*30),1);
if (v_f1 !=v_f2) then
set v_family_name = concat(v_f1, v_f2);
end if;
return(v_family_name);
end$
delimiter ;

これはmid関数をつかって一文字抜き出して合成するというものでしたが、文字単位でなく文字列単位で行いたいときにはELT関数を使います。これは第一引数の数字にあわせて文字列を返すというものです。

delimiter $
create function rand_virtual_name() returns varchar(20)
begin
declare v_virtual_name varchar(20);
declare v_f1,v_f2 varchar(10);
set v_f1=elt(FLOOR(1 + RAND()*20),'コードギアス亡国の','ジョジョの','中二病でも','アイドル','恋と選挙と','電波女と','アウトブレイク','ささみさん','人類は','テラ','進撃の','僕は友達が','とある魔術の','謎の','殺人','インフィニット','魔法少女','ガンダム','13日の','さんをつけろよ');
set v_f2=elt(FLOOR(1 + RAND()*20),'アキト','奇妙な冒険','恋がしたい!','マスター','チョコレート','青春男','カンパニー','@がんばらない','衰退しました','フォーマーズ','巨人','少ない','禁書目録','彼女X','教室','ストラトス','まどか☆マギカ','UC[ユニコーン]','金曜日','デコ助野郎!');
set v_virtual_name = concat(v_f1, v_f2);
return(v_virtual_name);
end$
delimiter ;

乱数により時々実在の何かになってしまうかもしれませんが、まぁ乱数のせい、ということで :)

実行してみますぜ。

えいっ。

mysql> select rand_virtual_name();
+----------------------+
| rand_virtual_name() |
+----------------------+
| 人類はまどか☆マギカ |
+----------------------+
1 row in set (0.00 sec)

うーん、博愛的だなぁ。

mysql> select rand_virtual_name();
+----------------------------+
| rand_virtual_name() |
+----------------------------+
| インフィニット衰退しました |
+----------------------------+
1 row in set (0.00 sec)

いや、確かにシーズン2はチト力が落ちているかもしれんけど。。。

mysql> select rand_virtual_name();
+-------------------------+
| rand_virtual_name() |
+-------------------------+
| とある魔術のデコ助野郎! |
+-------------------------+
1 row in set (0.00 sec)

誰? 誰のこと??

mysql> select rand_virtual_name();
+------------------------+
| rand_virtual_name() |
+------------------------+
| ガンダム@がんばらない |
+------------------------+
1 row in set (0.00 sec)

がんばって〜。

ということで、乱数による偶然の笑いを得るか、乱数の精度に嘆きつつ、文字列を多くするかして
辛いテストを乗り越えてください。。。。

明日 12/14 は @sh2nd さんです。お楽しみに。


PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>