存储过程

-- ここから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;    
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值