| CREATE or REPLACE PROCEDURE GET_DATA_LOOP
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
RET_VALUE VARCHAR2(2000);
WK_VALUE VARCHAR2(2000);
CNT_MAX NUMBER;
/************************************************/
/* 名前を作成する為の変数 */
/************************************************/
TARGET_NAME_SEED VARCHAR2(100) := '山川森鈴木高田本多村吉岡松丸杉浦中尾安原野内';
TARGET_KANA_SEED VARCHAR2(200);
TARGET_NAME2_SEED VARCHAR2(100) := '和元雅正由克友浩春冬洋輝';
TARGET_KANA2_SEED VARCHAR2(100) := 'カズ,モト,マサ,マサ,ヨシ,カツ,トモ,ヒロ,ハル,フユ,ヒロ,テル';
TARGET_NAME3_SEED VARCHAR2(100) := '男也一行樹之';
TARGET_KANA3_SEED VARCHAR2(100) := 'オ,ヤ,カズ,ユキ,キ,ユキ';
TARGET_NAME4_SEED VARCHAR2(100) := '子代美恵';
TARGET_KANA4_SEED VARCHAR2(100) := 'コ,ヨ,ミ,エ';
TARGET_ARRAY_1 DBMS_UTILITY.UNCL_ARRAY;
TARGET_LEN_1 BINARY_INTEGER;
TARGET_ARRAY_2 DBMS_UTILITY.UNCL_ARRAY;
TARGET_LEN_2 BINARY_INTEGER;
TARGET_ARRAY_3 DBMS_UTILITY.UNCL_ARRAY;
TARGET_LEN_3 BINARY_INTEGER;
TARGET_ARRAY_4 DBMS_UTILITY.UNCL_ARRAY;
TARGET_LEN_4 BINARY_INTEGER;
-- *********************************************************
-- 内部プロシージャ( データ作成 )
-- *********************************************************
PROCEDURE INSERT_DATA( idx in NUMBER )
AS
TARGET_CODE VARCHAR2(4);
TARGET_SYOZOKU VARCHAR2(4);
TARGET_KANRISYA VARCHAR2(4);
TARGET_BIRTHDAY DATE;
TARGET_SAL NUMBER(15,0);
/************************************************/
/* 名前を作成する為の変数 */
/************************************************/
TARGET_NAME VARCHAR2(50);
/* 文字列の長さをセット */
TARGET_NAME_LEN NUMBER(2,0) := LENGTH(TARGET_NAME_SEED);
TARGET_IDX NUMBER;
TARGET_KANA VARCHAR2(50);
TARGET_SEX NUMBER(1,0);
BEGIN
/************************************************/
/* 社員コード作成 */
/************************************************/
TARGET_CODE := LTRIM(TO_CHAR( idx, '0000' ));
/************************************************/
/* 社員氏名作成 */
/************************************************/
/* 姓の1文字目 */
TARGET_IDX := DBMS_RANDOM.VALUE(1,TARGET_NAME_LEN);
TARGET_NAME := SUBSTR(TARGET_NAME_SEED,TARGET_IDX,1);
TARGET_KANA := TARGET_ARRAY_1(TARGET_IDX);
/* 姓の2文字目 */
TARGET_IDX := DBMS_RANDOM.VALUE(1,TARGET_NAME_LEN);
TARGET_NAME := TARGET_NAME || SUBSTR(TARGET_NAME_SEED,TARGET_IDX,1);
TARGET_KANA := TARGET_KANA || TARGET_ARRAY_1(TARGET_IDX);
/* 姓と名の間のスペース */
TARGET_NAME := TARGET_NAME || ' ';
TARGET_KANA := TARGET_KANA || ' ';
/* 名の1文字目 */
TARGET_NAME_LEN := LENGTH(TARGET_NAME2_SEED);
TARGET_IDX := DBMS_RANDOM.VALUE(1,TARGET_NAME_LEN);
TARGET_NAME := TARGET_NAME || SUBSTR(TARGET_NAME2_SEED,TARGET_IDX,1);
TARGET_KANA := TARGET_KANA || TARGET_ARRAY_2(TARGET_IDX);
/* 性別の決定 */
TARGET_SEX := DBMS_RANDOM.VALUE(0,1);
/* 男性名 */
if TARGET_SEX = 0 then
/* 名の2文字目 */
TARGET_NAME_LEN := LENGTH(TARGET_NAME3_SEED);
TARGET_IDX := DBMS_RANDOM.VALUE(1,TARGET_NAME_LEN);
TARGET_NAME := TARGET_NAME || SUBSTR(TARGET_NAME3_SEED,TARGET_IDX,1);
TARGET_KANA := TARGET_KANA || TARGET_ARRAY_3(TARGET_IDX);
/* 女性名 */
else
/* 名の2文字目 */
TARGET_NAME_LEN := LENGTH(TARGET_NAME4_SEED);
TARGET_IDX := DBMS_RANDOM.VALUE(1,TARGET_NAME_LEN);
TARGET_NAME := TARGET_NAME || SUBSTR(TARGET_NAME4_SEED,TARGET_IDX,1);
TARGET_KANA := TARGET_KANA || TARGET_ARRAY_4(TARGET_IDX);
end if;
/************************************************/
/* 所属コード作成 */
/************************************************/
TARGET_SYOZOKU := LTRIM(TO_CHAR( DBMS_RANDOM.VALUE(1,3), '0000' ));
/************************************************/
/* 管理者作成 */
/************************************************/
if TARGET_CODE <= 10 then
TARGET_KANRISYA := NULL;
else
loop
TARGET_KANRISYA :=
LTRIM(TO_CHAR( DBMS_RANDOM.VALUE(11,CNT_MAX), '0000' ));
exit when TARGET_KANRISYA != TARGET_CODE;
end loop;
end if;
/************************************************/
/* 誕生日作成 */
/************************************************/
TARGET_BIRTHDAY := SYSDATE;
TARGET_BIRTHDAY := TARGET_BIRTHDAY - DBMS_RANDOM.VALUE(20,30)*365;
TARGET_BIRTHDAY := TARGET_BIRTHDAY + DBMS_RANDOM.VALUE(1,365);
TARGET_BIRTHDAY := TRUNC(TARGET_BIRTHDAY);
/************************************************/
/* 給与作成 */
/************************************************/
TARGET_SAL := TRUNC(DBMS_RANDOM.VALUE(16,50))*10000;
INSERT INTO "社員データ"
(
"社員コード"
,"氏名"
,"フリガナ"
,"所属"
,"性別"
,"給与"
,"管理者"
,"生年月日"
)
VALUES (
TARGET_CODE
,TARGET_NAME
,TARGET_KANA
,TARGET_SYOZOKU
,TARGET_SEX
,TARGET_SAL
,TARGET_KANRISYA
,TARGET_BIRTHDAY
);
END;
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
/************************************************/
/* 社員マスタと同一フォーマットの */
/* 社員テーブルをクリア */
/************************************************/
WK_VALUE := 'TRUNCATE TABLE "社員データ"';
EXECUTE IMMEDIATE WK_VALUE;
/************************************************/
/* カナ用の配列としてのSEEDを作成する */
/************************************************/
TARGET_KANA_SEED := 'ヤマ,カワ,モリ,スズ,キ,タカ,タ,モト,タ,ムラ,ヨシ,オカ';
TARGET_KANA_SEED := TARGET_KANA_SEED || ',マツ,マル,スギ,ウラ,ナカ,オ,ヤス,ハラ,ノ,ウチ';
COMMA_TO_TOKEN(TARGET_KANA_SEED,TARGET_LEN_1,TARGET_ARRAY_1);
COMMA_TO_TOKEN(TARGET_KANA2_SEED,TARGET_LEN_2,TARGET_ARRAY_2);
COMMA_TO_TOKEN(TARGET_KANA3_SEED,TARGET_LEN_3,TARGET_ARRAY_3);
COMMA_TO_TOKEN(TARGET_KANA4_SEED,TARGET_LEN_4,TARGET_ARRAY_4);
/************************************************/
/* ループを無条件に100回実行する */
/************************************************/
CNT_MAX := 1000;
FOR i IN 1..CNT_MAX LOOP
INSERT_DATA( i );
END LOOP;
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
/
| |