PL/SQL 取引データ作成
|
|
日時: 2008/07/23 09:48
名前: lightbox
|
プロシージャ名 : 取引データ作成
| 列名 | 型値 | 型定数 | 型名 | 最大桁 | 精度 | スケール | NULL | 主キー | デフォルト | 型説明 | 備考 |
1 | 取引区分 | 129 | adChar | VARCHAR2 | 2 | | | N | 1 | | 文字列値 | |
2 | 伝票番号 | 131 | adNumeric | NUMBER | | 8 | 0 | N | 2 | | 固定精度およびスケールの正確な数値 | |
3 | 行 | 131 | adNumeric | NUMBER | | 2 | 0 | N | 3 | | 固定精度およびスケールの正確な数値 | |
4 | 取引日付 | 135 | adDBTimeStamp | DATE | | | | | | | 日付/時刻スタンプ | |
5 | 取引先コード | 129 | adChar | VARCHAR2 | 4 | | | | | | 文字列値 | |
6 | 商品コード | 129 | adChar | VARCHAR2 | 4 | | | | | | 文字列値 | |
7 | 数量 | 131 | adNumeric | NUMBER | | 15 | | | | | 固定精度およびスケールの正確な数値 | |
8 | 単価 | 131 | adNumeric | NUMBER | | 15 | | | | | 固定精度およびスケールの正確な数値 | |
9 | 金額 | 131 | adNumeric | NUMBER | | 15 | | | | | 固定精度およびスケールの正確な数値 | |
10 | 更新済 | 129 | adChar | VARCHAR2 | 1 | | | | | | 文字列値 | |
|
|
引数の値ぶんのループを作成 ( No.1 ) |
|
日時: 2008/07/23 09:59
名前: lightbox
|
日時: 2008/07/23 09:59 名前: lightbox
|
引数の値ぶんの空の伝票データ( 行は1行 ) の作成 ( No.2 ) |
日時: 2008/07/23 10:07 名前: lightbox
|
引数の値ぶんの空の伝票データ( 行は1〜4行 ) の作成 ( No.3 ) |
日時: 2008/07/23 10:13 名前: lightbox
|
伝票データとして、取引日付の作成 ( No.4 ) |
日時: 2008/07/23 10:26 名前: lightbox
拡張子:
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
/************************************************/
/* 社員マスタと同一フォーマットの */
/* 社員テーブルをクリア */
/************************************************/
WK_VALUE := 'TRUNCATE TABLE "取引データ"';
EXECUTE IMMEDIATE WK_VALUE;
/************************************************/
/* ループを引数の回数ぶん実行する */
/************************************************/
FOR i IN 1..PM_NUMBER LOOP
TARGET_ROW := DBMS_RANDOM.VALUE(1,4);
TARGET_DATE := TO_DATE('2008/04/01');
TARGET_DATE := ADD_MONTHS( TARGET_DATE, DBMS_RANDOM.VALUE(0,2) );
TARGET_DATE := TARGET_DATE + DBMS_RANDOM.VALUE(0,30);
TARGET_DATE := TRUNC(TARGET_DATE);
FOR j IN 1..TARGET_ROW LOOP
INSERT INTO "取引データ"
(
"取引区分"
,"伝票番号"
,"行"
,取引日付
)
VALUES (
'10'
,i
,j
,TARGET_DATE
);
END LOOP;
END LOOP;
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
|
取引先コード、商品コード、数量作成 ( No.5 ) |
日時: 2008/07/23 10:36 名前: lightbox
取引先 : 50 件 0001 〜 0050
商品 : 100 件 0001 〜 0100
数量 : 1 〜 20
拡張子:
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
/************************************************/
/* 社員マスタと同一フォーマットの */
/* 社員テーブルをクリア */
/************************************************/
WK_VALUE := 'TRUNCATE TABLE "取引データ"';
EXECUTE IMMEDIATE WK_VALUE;
/************************************************/
/* ループを引数の回数ぶん実行する */
/************************************************/
FOR i IN 1..PM_NUMBER LOOP
TARGET_ROW := DBMS_RANDOM.VALUE(1,4);
TARGET_DATE := TO_DATE('2008/04/01');
TARGET_DATE := ADD_MONTHS( TARGET_DATE, DBMS_RANDOM.VALUE(0,2) );
TARGET_DATE := TARGET_DATE + DBMS_RANDOM.VALUE(0,30);
TARGET_DATE := TRUNC(TARGET_DATE);
TARGET_CODE1 := LTRIM(TO_CHAR( DBMS_RANDOM.VALUE(1,50), '0000' ));
FOR j IN 1..TARGET_ROW LOOP
TARGET_CODE2 := LTRIM(TO_CHAR( DBMS_RANDOM.VALUE(1,100), '0000' ));
TARGET_SU := TRUNC(DBMS_RANDOM.VALUE(1,20));
INSERT INTO "取引データ"
(
"取引区分"
,"伝票番号"
,"行"
,取引日付
,取引先コード
,商品コード
,数量
)
VALUES (
'10'
,i
,j
,TARGET_DATE
,TARGET_CODE1
,TARGET_CODE2
,TARGET_SU
);
END LOOP;
END LOOP;
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
|
完成 ( No.6 ) |
日時: 2008/07/23 10:56 名前: lightbox
拡張子:
PROCEDURE 取引データ作成
(
PM_NUMBER IN NUMBER
)
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
RET_VALUE VARCHAR2(2000);
WK_VALUE VARCHAR2(2000);
TARGET_ROW NUMBER;
TARGET_DATE DATE;
TARGET_CODE1 VARCHAR2(4);
TARGET_CODE2 VARCHAR2(4);
TARGET_SU NUMBER;
TARGET_TANKA NUMBER;
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
/************************************************/
/* 社員マスタと同一フォーマットの */
/* 社員テーブルをクリア */
/************************************************/
WK_VALUE := 'TRUNCATE TABLE "取引データ"';
EXECUTE IMMEDIATE WK_VALUE;
/************************************************/
/* ループを引数の回数ぶん実行する */
/************************************************/
FOR i IN 1..PM_NUMBER LOOP
TARGET_ROW := TRUNC(DBMS_RANDOM.VALUE(1,5));
TARGET_DATE := TO_DATE('2008/04/01');
TARGET_DATE := ADD_MONTHS( TARGET_DATE, TRUNC(DBMS_RANDOM.VALUE(0,3)) );
TARGET_DATE := TARGET_DATE + DBMS_RANDOM.VALUE(0,30);
TARGET_DATE := TRUNC(TARGET_DATE);
TARGET_CODE1 := LTRIM(TO_CHAR( TRUNC(DBMS_RANDOM.VALUE(1,51)), '0000' ));
FOR j IN 1..TARGET_ROW LOOP
TARGET_CODE2 := LTRIM(TO_CHAR( TRUNC(DBMS_RANDOM.VALUE(1,101)), '0000' ));
TARGET_SU := TRUNC(DBMS_RANDOM.VALUE(1,21));
SELECT
販売単価
INTO
TARGET_TANKA
FROM 商品マスタ
WHERE
商品コード = TARGET_CODE2;
INSERT INTO "取引データ"
(
"取引区分"
,"伝票番号"
,"行"
,取引日付
,取引先コード
,商品コード
,数量
,単価
,金額
)
VALUES (
'10'
,i
,j
,TARGET_DATE
,TARGET_CODE1
,TARGET_CODE2
,TARGET_SU
,TARGET_TANKA
,TARGET_SU * TARGET_TANKA
);
END LOOP;
END LOOP;
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
|
|
|
|