コメント |
↓日次更新セット
http://lightbox.on.coocan.jp/download/PLSQL_01.lzh
@DIV
/*
/*==========================================================
日次更新処理
===========================================================*/
CREATE or REPLACE PROCEDURE 日次更新
(
PM_DATE IN DATE
)
AS
FLD_ROWID ROWID;
FLD_取引先 VARCHAR2(4);
FLD_商品 VARCHAR2(4);
FLD_数量 NUMBER;
FLD_金額 NUMBER;
FLD_日付 DATE;
ERROR_FLG NUMBER(1,0);
/*==========================================================
カーソル
===========================================================*/
CURSOR cur_main is
select ROWID
,取引先コード
,商品コード
,数量
,金額
,取引日付
from 取引データ
where 取引日付 = PM_DATE
and 更新済 is NULL;
BEGIN
/*==========================================================
初期処理
===========================================================*/
DBMS_OUTPUT.PUT_LINE('日次更新 START');
SAVEPOINT UPD_START;
ERROR_FLG := 0;
/*==========================================================
主処理
===========================================================*/
OPEN cur_main;
LOOP
FETCH cur_main INTO
FLD_ROWID,
FLD_取引先,
FLD_商品,
FLD_数量,
FLD_金額,
FLD_日付;
if cur_main%NOTFOUND then
EXIT;
end if;
LOOP
UPDATE 得意先集計
set
更新日 = SYSDATE
,当月売上金額 = 当月売上金額 + FLD_金額
where
請求先 = FLD_取引先
and 経過月 = EXTRACT(month from FLD_日付)
;
IF SQL%NOTFOUND THEN
INSERT INTO 得意先集計
(請求先,経過月,当月売上金額,更新日)
VALUES(FLD_取引先,EXTRACT(month from FLD_日付),0,SYSDATE);
ELSE
EXIT;
END IF;
END LOOP;
LOOP
UPDATE 商品集計
set
更新日 = SYSDATE
,当月売上数量 = 当月売上数量 + FLD_数量
,当月売上金額 = 当月売上金額 + FLD_金額
where
商品コード = FLD_商品
and 経過月 = EXTRACT(month from FLD_日付)
;
IF SQL%NOTFOUND THEN
INSERT INTO 商品集計
(商品コード,経過月,当月売上数量,当月売上金額,更新日)
VALUES(FLD_商品,EXTRACT(month from FLD_日付),0,0,SYSDATE);
ELSE
EXIT;
END IF;
END LOOP;
UPDATE 取引データ
SET "更新済" = '1'
WHERE ROWID = FLD_ROWID;
END LOOP;
CLOSE cur_main;
/*==========================================================
終了処理
===========================================================*/
if ERROR_FLG != 0 then
ROLLBACK TO UPD_START;
DBMS_OUTPUT.PUT_LINE('異常終了');
else
DBMS_OUTPUT.PUT_LINE('正常終了');
end if;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生');
ROLLBACK TO UPD_START;
END 日次更新;
/
@END
|