-- ここからPL/SQL処理 --------------------------------------------------------
・配達合計ワークの存在チェックをする。
≪テーブル≫
配達合計ワーク
≪抽出条件≫
セッションID = 引数.オラクル.セッションID
シリアル№ = 引数.オラクル.シリアル№
対象データが存在する場合、配達合計ワークを削除する。
≪テーブル≫
配達合計ワーク
≪削除条件≫
セッションID = 引数.オラクル.セッションID
シリアル№ = 引数.オラクル.シリアル№
・請求DBより配達合計ワークを作成する。作成内容はデータ編集仕様書2を参照。
≪テーブル≫
請求DB A10
物流センターマスタ M02
≪抽出条件≫
A10.荷主コード = 引数.荷主コード
A10.出荷日 BETWEEN 引数.出荷日FROM AND 引数.出荷日TO
A10.AJM請求除外指定区分 = 1:請求対象
A10.物流センターコード = M02.物流センターコード
M02.倉庫区分 IN 1:DC
2:DC(転送)
≪集計キー≫
A10.荷主コード
A10.物流センターコード
A10.温度区分
A10.AJM緊急区分
CASE WHEN A10.AJM緊急区分 = 2 THEN 9 …緊急の場合、届先区分9にする
ELSE …通常、対象外の場合、実績の届先区分を採用する
CASE A10.届先区分 WHEN 4 THEN 1 … 「個人」は「病院」に集約する
ELSE A10.届先区分
END
END
CASE WHEN (A10.AJM緊急区分 = 1 OR A10.AJM緊急区分 = 0) AND A10.届先区分 = 3
THEN A10.得意先コード
ELSE '0000000000'
END
・処理終了。
引数.処理結果に'OK'を格納する。
コミット処理をする。
※処理中にエラーが発生した場合は例外処理を実行して処理を終了する。
ロールバック処理をする。
引数.ステータスにSQLのエラーメッセージを格納する。
引数.処理結果に'NO'を格納する。
-- ここまでPL/SQL処理 --------------------------------------------------------
create or replace procedure ST_WP01_S_HAITOTAL_01( -- ***************************************************************************
-- * 概要 ST_WP01_S_HAITOTAL_01
-- * 引数 : 1.IN_SESSION_ID : 上記で取得したオラクル.セッションID(INPUT)
-- * 2.IN_SERIAL_NO : 上記で取得したオラクル.シリアル№(INPUT)
-- * 3.IN_KATYU_CD : 検索部.荷主コード(INPUT)
-- * 4.IN_NYDATE_F : 検索部.出荷日FROM(INPUT)
-- * 5.IN_NYDATE_T : 検索部.出荷日TO(INPUT)
-- * 6.IN_USER_ID : COOKIE.ユーザコード(INPUT)
-- * 7.OUT_SYORI_KBN : 処理区分(OUTPUT)
-- * 8.OUT_STATUS : ステータス(OUTPUT)
-- * 9.ERR_RET : 処理結果(OUTPUT) -- * 作成日 2007/01/30 -- ****************************************************************************
IN_SESSION_ID IN VARCHAR2, -- 上記で取得したオラクル.セッションID(INPUT)
IN_SERIAL_NO IN VARCHAR2, --上記で取得したオラクル.シリアル№(INPUT)
IN_KATYU_CD IN VARCHAR2, --検索部.荷主コード(INPUT)
IN_SYDATE_F IN VARCHAR2, -- 検索部.出荷日FROM(INPUT)
IN_SYDATE_T IN VARCHAR2, --検索部.出荷日TO(INPUT)
IN_USER_ID IN VARCHAR2, -- COOKIE.ユーザコード(INPUT)
OUT_SYORI_KBN OUT VARCHAR2, --処理区分
OUT_STATUS OUT VARCHAR2, --ステータス
ERR_RET OUT VARCHAR2 --処理結果
) IS
--変数定義
ROWCOUNT NUMBER(10):=0;
--請求DB変数
A10NINUSI_CD A10_SEIKYU.NINUSI_CD%TYPE; --② 荷主コード
A10BC_CNT_CD A10_SEIKYU.BC_CNT_CD%TYPE; --② 物流センターコード
A10ONDO_KBN A10_SEIKYU.ONDO_KBN%TYPE; --② 温度区分
A10AJM_KIN_KBN A10_SEIKYU.AJM_KIN_KBN%TYPE; --② AJM緊急区分
A10TODOKE_KBN A10_SEIKYU.TODOKE_KBN%TYPE; --届先区分
A10TOKU_CD VARCHAR2(10); --得意先コード
A10TOKU_NM VARCHAR2(100); --得意先名
A10S_KANSEN_KEI NUMBER(10); --請求_幹線料金
A10S_TENSO_KEI NUMBER(10); --請求_転送料金
A10S_OROSI_KEI NUMBER(10); --請求_卸料金
A10S_BYOIN_KEI NUMBER(10); --請求_病院料金
A10S_MINI_SAI NUMBER(10); --請求_ミニマムチャージ差・
A10S_SEIKYU NUMBER(10); --請求_請求運賃
A10S_TYOSEI NUMBER(10); --請求_請求調整額
A10A_KOGUTI_QTY NUMBER(10); --納品案内書_個口数
A10A_WEIGHT NUMBER(10); --納品案内書_重量(㎏)
/********************/
/*** カーソル定義 ***/
/********************/
CURSOR A10_M02_CURSOR IS
SELECT
A10.NINUSI_CD --② 荷主コード
,A10.BC_CNT_CD --② 物流センターコード
,A10.ONDO_KBN --② 温度区分
,A10.AJM_KIN_KBN --② AJM緊急区分
,CASE WHEN A10.AJM_KIN_KBN=0 THEN MIN(A10.TODOKE_KBN)
WHEN A10.AJM_KIN_KBN=1 THEN MIN(A10.TODOKE_KBN)
WHEN A10.AJM_KIN_KBN=2 THEN 9
END --② "AJM緊急区分=0:対象外→届先区分AJM緊急区分=1:通常 →届先区分AJM緊急区分=2:緊急 →9"
,CASE WHEN A10.AJM_KIN_KBN <> 2 AND MIN(A10.TODOKE_KBN)<> 3 THEN '0000000000'
WHEN A10.AJM_KIN_KBN <> 2 AND MIN(A10.TODOKE_KBN) = 3 THEN MAX(A10.TOKU_CD)
WHEN A10.AJM_KIN_KBN = 2 THEN '0000000000'
END --② "AJM緊急区分≠2:緊急 AND 届先区分≠3:転送→オールゼロAJM緊急区分≠2:緊急 AND 届先区分=3:転送→得意先コードAJM緊急区分=2:緊急→オールゼロ"
,CASE WHEN A10.AJM_KIN_KBN <> 2 AND MIN(A10.TODOKE_KBN)<> 3 THEN ' '
WHEN A10.AJM_KIN_KBN <> 2 AND MIN(A10.TODOKE_KBN) = 3 THEN MAX(A10.TOKU_NM)
WHEN A10.AJM_KIN_KBN = 2 THEN ' '
END --② "AJM緊急区分≠2:緊急 AND 届先区分≠3:転送→ブランクAJM緊急区分≠2:緊急 AND 届先区分=3:転送→MAX(得意先名)AJM緊急区分=2:緊急→ブラン?
,SUM(A10.S_KANSEN_KEI) --② SUM(請求_幹線料金)
,SUM(A10.S_TENSO_KEI) --② SUM(請求_転送料金)
,SUM(A10.S_OROSI_KEI) --② SUM(請求_卸料金)
,SUM(A10.S_BYOIN_KEI) --② SUM(請求_病院料金)
,SUM(A10.S_MINI_SAI) --② SUM(請求_ミニマムチャージ差・
,SUM(A10.S_SEIKYU) --② SUM(請求_請求運賃)
,SUM(A10.S_TYOSEI) --② SUM(請求_請求調整額)
,SUM(A10.A_KOGUTI_QTY) --② SUM(納品案内書_個口数)
,SUM(A10.A_WEIGHT) --② SUM(納品案内書_重量(㎏))
FROM A10_SEIKYU A10,M02_BCCENTER M02
WHERE A10.NINUSI_CD = IN_KATYU_CD
AND A10.SYU_DATE BETWEEN IN_SYDATE_F
AND IN_SYDATE_T
AND A10.JYOGAI_KBN = 1
AND A10.BC_CNT_CD = M02.BC_CNT_CD
AND M02.BC_KBN IN(1,2)
GROUP BY
A10.NINUSI_CD --A10.荷主コード
,A10.BC_CNT_CD --A10.物流センターコード
,A10.ONDO_KBN --A10.温度区分
,A10.AJM_KIN_KBN --A10.AJM緊急区分
, CASE WHEN A10.AJM_KIN_KBN = 2 THEN 9 --…緊急の場合、届先区分9にする
ELSE --…通常、対象外の場合、実績の届先区分を採用する
CASE A10.TODOKE_KBN WHEN 4 THEN 1 --… 「個人」は「病院」に集約する
ELSE A10.TODOKE_KBN
END
END
,CASE WHEN (A10.AJM_KIN_KBN = 1 OR A10.AJM_KIN_KBN = 0) AND A10.TODOKE_KBN = 3
THEN A10.TOKU_CD
ELSE '0000000000'
END;
BEGIN
ERR_RET:='OK'; --・配達合計ワークの存在チェックをする。
SELECT COUNT(*) INTO ROWCOUNT
FROM WP01_S_HAITOTAL WP01
WHERE WP01.SESSION_ID=IN_SESSION_ID --セッションID = 引数.オラクル.セッションID
AND WP01.SERIAL_NO = IN_SERIAL_NO; --シリアル№ = 引数.オラクル.シリアル№
-- 対象データが存在する場合、配達合計ワークを削除する。
IF ROWCOUNT > 0 THEN
DELETE FROM WP01_S_HAITOTAL WP01
WHERE WP01.SESSION_ID=IN_SESSION_ID --セッションID = 引数.オラクル.セッションID
AND WP01.SERIAL_NO = IN_SERIAL_NO; --シリアル№ = 引数.オラクル.シリアル№
END IF;
--・請求DBより配達合計ワークを作成する
OPEN A10_M02_CURSOR;
LOOP
FETCH A10_M02_CURSOR INTO
A10NINUSI_CD --② 荷主コード
,A10BC_CNT_CD --② 物流センターコード
,A10ONDO_KBN --② 温度区分
,A10AJM_KIN_KBN --② AJM緊急区分
,A10TODOKE_KBN --届先区分
,A10TOKU_CD --得意先コード
,A10TOKU_NM --得意先名
,A10S_KANSEN_KEI --請求_幹線料金
,A10S_TENSO_KEI --請求_転送料金
,A10S_OROSI_KEI --請求_卸料金
,A10S_BYOIN_KEI --請求_病院料金
,A10S_MINI_SAI --請求_ミニマムチャージ差・
,A10S_SEIKYU --請求_請求運賃
,A10S_TYOSEI --請求_請求調整額
,A10A_KOGUTI_QTY --納品案内書_個口数
,A10A_WEIGHT; --納品案内書_重量(㎏)
EXIT WHEN A10_M02_CURSOR%NOTFOUND;
INSERT INTO WP01_S_HAITOTAL(
SESSION_ID --1 セッションID
,SERIAL_NO --2 シリアル№
,NINUSI_CD --3 荷主コード
,BC_CNT_CD --4 物流センターコード
,SYU_DATE_F --5 出荷日FROM
,SYU_DATE_T --6 出荷日TO
,ONDO_KBN --7 温度区分
,AJM_KIN_KBN --8 AJM緊急区分
,TODOKE_KBN --9 届先区分
,TOKU_CD --10 得意先コード
,TOKU_NM --11 得意先名
,S_KANSEN_KEI --12 請求_幹線料金
,S_TENSO_KEI --13 請求_転送料金
,S_OROSI_KEI --14 請求_卸料金
,S_BYOIN_KEI --15 請求_病院料金
,S_MINI_SAI --16 請求_ミニマムチャージ差・
,S_SEIKYU --17 請求_請求運賃
,S_TYOSEI --18 請求_請求調整額
,A_KOGUTI_QTY --19 納品案内書_個口数
,A_WEIGHT --20 納品案内書_重量(㎏)
,MK_DATE --21 作成日
,MK_TIME --22作成時間
,MK_USER --23 作成ユーザ?
,MK_PG --24 作成PG )
VALUES
( IN_SESSION_ID --① オラクル.セッションID ,IN_SERIAL_NO --① オラクル.シリアル№
,A10NINUSI_CD --② 荷主コード
,A10BC_CNT_CD --② 物流センターコード
,IN_SYDATE_F --① 出荷日FROM
,IN_SYDATE_T --① 出荷日TO
,A10ONDO_KBN --② 温度区分
,A10AJM_KIN_KBN --② AJM緊急区分
,A10TODOKE_KBN --② "AJM緊急区分=0:対象外→届先区分AJM緊急区分=1:通常 →届先区分AJM緊急区分=2:緊急 →9"
,A10TOKU_CD --② "AJM緊急区分≠2:緊急 AND 届先区分≠3:転送→オールゼロAJM緊急区分≠2:緊急 AND 届先区分=3:転送→得意先コードAJM緊急区分=2:緊急→オールゼロ"
,A10TOKU_NM --② "AJM緊急区分≠2:緊急 AND 届先区分≠3:転送→ブランクAJM緊急区分≠2:緊急 AND 届先区分=3:転送→MAX(得意先名)AJM緊急区分=2:緊急→ブラン?
,A10S_KANSEN_KEI --② SUM(請求_幹線料金)
,A10S_TENSO_KEI --② SUM(請求_転送料金)
,A10S_OROSI_KEI --② SUM(請求_卸料金)
,A10S_BYOIN_KEI --② SUM(請求_病院料金)
,A10S_MINI_SAI --② SUM(請求_ミニマムチャージ差・
,A10S_SEIKYU --② SUM(請求_請求運賃)
,A10S_TYOSEI --② SUM(請求_請求調整額)
,A10A_KOGUTI_QTY --② SUM(納品案内書_個口数)
,A10A_WEIGHT --② SUM(納品案内書_重量(㎏))
,TO_CHAR(SYSDATE,'YYYYMMDD') --- DBサーバ.マシン日付(YYYYMMDD)
,TO_CHAR(SYSDATE,'HH24MISS') --- DBサーバ.マシン時間(HH24MISS)
,IN_USER_ID --③ ユーザコード
,'P01_SEIKYU' --固定 'P01_SEIKYU'
); END LOOP;
CLOSE A10_M02_CURSOR;
COMMIT;
RETURN;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
OUT_STATUS := SQLERRM;
ERR_RET := 'NO';
IF A10_M02_CURSOR%ISOPEN THEN
CLOSE A10_M02_CURSOR;
END IF;
END;