テスト用に適当な名前を生成する
元ネタはかんたん10分プログラミング - 第11回 テスト用の名前データを自動生成する:ITpro
PL/SQLに移植して、SELECT文で適当な名前を生成するためのプロシージャを作成してみた。
CREATE OR REPLACE PACKAGE Test is function GetRandName return varchar2; end Test; / CREATE OR REPLACE PACKAGE BODY Test is TYPE tArray6 IS TABLE OF VARCHAR2(6) NOT NULL; /** * GetRandName テスト用の架空の人名を返す * @return 人名 */ function GetRandName return varchar2 is vFName_List1 tArray6 := tArray6('*','山','川','谷','田','小','石','水','大','橋','野','池','吉','中'); vFName_List2 tArray6 := tArray6('田','本','川','口','野','村','崎','山','島','上','浦','内','原'); vFamilierFNs tArray6 := tArray6('加藤','鈴木','佐藤','高橋','渡辺','伊藤','斉藤','佐々木','原','田中'); vLName_List1 tArray6 := tArray6('順','優','恵','浩','裕','正','昭','真','純','清','博','孝','幸'); vLName_List2 tArray6 := tArray6('*','一','二','子','美','一郎','実','義','夫','雄','太郎','彦'); vFName1 varchar2(6); vFName2 varchar2(2); vLName1 varchar2(2); vLName2 varchar2(4); begin -- 名字の作成 vFName1 := vFName_List1(trunc(dbms_random.value(1, vFName_List1.Count))); vFName2 := vFName_List2(trunc(dbms_random.value(1, vFName_List2.Count))); if (vFName1=vFName2 or vFName1 = '*' or vFName1||vFName2 = '池川') then -- 変な名字ができてしまったら無難リストから選び直す -- vFName_List1に'*'を混ぜる割合が高いほど無難な名字が増える vFName1 := vFamilierFNs(trunc(dbms_random.value(1, vFamilierFNs.Count))); vFName2 := ''; end if; -- 名前の作成 vLName1 := vLName_List1(trunc(dbms_random.value(1, vLName_List1.Count))); vLName2 := vLName_List2(trunc(dbms_random.value(1, vLName_List2.Count))); if (vLName2 = '*') then vLName2 := ''; end if; return vFName1||vFName2||' '||vLName1||vLName2; end GetRandName; end Test; /