|
실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.
CREATE OR REPLACE PROCEDURE BANKP_BAT.UDP_MST_UPDATE(P_IN_BASE_DT IN VARCHAR2, -- 기준일자
P_IN_BANK_CD IN VARCHAR2) IS -- 회원사코드
----------------------------
-- 프로그램 사용변수
----------------------------
V_READ_CNT NUMBER (008); -- READ CNT
V_WORK_TIME VARCHAR2(006); -- 기준시간
V_ERR_CODE VARCHAR2(004); -- 에러코드
V_INS_FLAG VARCHAR2(001); -- 등록FLAG
V_CHECK_FLAG VARCHAR2(001); -- CHECK FLAG
V_CHANGE_FLAG VARCHAR2(001); -- 변동분유/무 FLAG
V_ACCT_NO VARCHAR2(025); -- 계좌번호
V_PERS_GBN VARCHAR2(001); -- 개인기업구분
V_CONO_PID VARCHAR2(013); -- 주민법인번호
V_BSN_NO VARCHAR2(010); -- 사업자번호
V_SEND_DATA CHAR(900); -- 에러전송데이터
V_SEQ_NO VARCHAR2(010); -- SEQ번호
V_SUCCESS_CNT NUMBER (008); -- 반영성공 CNT
TBP002_ROW TBP002_OV%ROWTYPE;
V_RET_CODE VARCHAR2(004); -- 화일송수신원장 처리결과
RAISE_FORCE_EXIT EXCEPTION;
RAISE_CONTINUE EXCEPTION;
----------------------------
-- CURSOR 선언
----------------------------
CURSOR OV_LOG_C IS
SELECT MB_ENP_CD
,SPC_SEQ
,CO_PID
,CO_INDV_CLS
,BZNO
,ENP_NM
,REPER_NM
,MO_ZIP
,MO_ADDRA
,MO_TEL_NO
,BZC_CD
,ENP_SZE_CD
,ENP_FCD
,IPO_CD
,HPAGE_URL
,ACNO
,MNG_BR_CD
,SBJ_CD
,MNG_BR_NM
,REG_RCD
,REG_RSN_OCC_DT
,TX_FCD
,OV_CLS
,XPIR_AF_OV_YN
,OV_BCDT
,TLIM_PF_LOS_DT
,LON_RM
,OV_AM
FROM TRL002_OV_RCV_LOG
WHERE MB_ENP_CD = P_IN_BANK_CD
ORDER BY SPC_SEQ
;
trl002_rec OV_LOG_C%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('* 수신LOG연체원장반영 처리시작!!!');
V_WORK_TIME := '';
SELECT TO_CHAR(SYSDATE, 'HH24MISS')
INTO V_WORK_TIME
FROM DUAL
;
V_READ_CNT := 0;
------------------------------------------------------------------------------------------
-- 송수신관리원장의 처리상태를 처리진행중 ('1')으로 변경한다.
------------------------------------------------------------------------------------------
BEGIN
UDP_FTP_INFO('M',
'1',
0,
'',
P_IN_BANK_CD,
'B06',
'M',
P_IN_BASE_DT,
V_RET_CODE);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('화일송수신 UPDATE ERROR '||'B06'||P_IN_BANK_CD||P_IN_BASE_DT||SUBSTR(SQLERRM,1,400));
RAISE RAISE_FORCE_EXIT;
END;
COMMIT;
OPEN OV_LOG_C;
LOOP
BEGIN
FETCH OV_LOG_C INTO trl002_rec ;
EXIT WHEN OV_LOG_C%NOTFOUND;
V_ERR_CODE := '0000';
V_INS_FLAG := 'N';
V_CHECK_FLAG := 'N';
V_CHANGE_FLAG := 'N';
V_READ_CNT := V_READ_CNT + 1;
---------------------------------------------------
-- 법인주민번호/사업자번호 INPUT CHECK
---------------------------------------------------
-- 법인주민번호가 존재하면 법인주민번호로 INSERT
---------------------------------------------------
IF trl002_rec.CO_PID != ' ' THEN
------------------------------------------------------
-- 연체정보원장에 기반영여부 CHECK
------------------------------------------------------
BEGIN
SELECT NVL(RLS_YN, ' ') -- 해제여부
,NVL(RLS_DT, ' ') -- 해제일자
,NVL(IN_CHNL, ' ') -- 유입경로
,NVL(MNG_BR_CD, ' ')
,NVL(MNG_BR_NM, ' ')
,NVL(SBJ_CD, ' ')
,NVL(REG_RCD, ' ')
,NVL(REG_RSN_OCC_DT, ' ')
,NVL(TX_FCD, ' ')
,NVL(OV_CLS, ' ')
,NVL(XPIR_AF_OV_YN, ' ')
,NVL(OV_BCDT, ' ')
,NVL(TLIM_PF_LOS_DD, ' ')
,NVL(LON_RM, 0)
,NVL(OV_AM, 0)
,UPD_DT
INTO TBP002_ROW.RLS_YN
,TBP002_ROW.RLS_DT
,TBP002_ROW.IN_CHNL
,TBP002_ROW.MNG_BR_CD
,TBP002_ROW.MNG_BR_NM
,TBP002_ROW.SBJ_CD
,TBP002_ROW.REG_RCD
,TBP002_ROW.REG_RSN_OCC_DT
,TBP002_ROW.TX_FCD
,TBP002_ROW.OV_CLS
,TBP002_ROW.XPIR_AF_OV_YN
,TBP002_ROW.OV_BCDT
,TBP002_ROW.TLIM_PF_LOS_DD
,TBP002_ROW.LON_RM
,TBP002_ROW.OV_AM
,TBP002_ROW.UPD_DT
FROM TBP002_OV
WHERE CO_CTZ_BZNO = trl002_rec.CO_PID
AND CO_CTZ_BZER_CLS = DECODE(trl002_rec.CO_INDV_CLS,'1','3','1')
AND MB_ENP_CD = trl002_rec.MB_ENP_CD
AND ACNO = trl002_rec.ACNO
;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_INS_FLAG := 'Y';
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP002_OV SELECT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.ACNO);
V_ERR_CODE := 'E900';
END;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------------
-- 온라인으로 해제한 일자가 작업기준일자보다 크면 SKIP
----------------------------------------------------------
IF TBP002_ROW.RLS_YN = 'Y' AND TBP002_ROW.IN_CHNL >= '10' AND TBP002_ROW.RLS_DT > P_IN_BASE_DT THEN
DBMS_OUTPUT.PUT_LINE('온라인해제건이 존재하여 연체정보등록을 할수없습니다.'||trl002_rec.ACNO);
V_ERR_CODE := 'E301';
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------------
-- 온라인으로 등재한 일자가 작업기준일자보다 크면 SKIP
----------------------------------------------------------
IF TBP002_ROW.RLS_YN = 'N' AND TBP002_ROW.IN_CHNL >= '10' AND TO_CHAR(TBP002_ROW.UPD_DT,'YYYYMMDD') > P_IN_BASE_DT THEN
DBMS_OUTPUT.PUT_LINE('온라인등재건이 존재하여 연체정보등록을 할수없습니다.'||trl002_rec.ACNO);
V_ERR_CODE := 'E302';
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------------
-- 이미 배치로 등록한 정보가 있으면 SKIP
----------------------------------------------------------
-- IF TBP002_ROW.RLS_YN = 'N' AND TBP002_ROW.IN_CHNL < '10' THEN
-- DBMS_OUTPUT.PUT_LINE('등재건이 존재하여 연체정보등록을 할수없습니다.'||trl002_rec.ACNO);
-- V_ERR_CODE := 'E103';
-- END IF;
--
-- IF V_ERR_CODE != '0000' THEN
-- RAISE RAISE_CONTINUE;
-- END IF;
---------------------------------------------------------------
-- 최초등록요청인 경우 INSERT, 해제후 재등록거래인경우 UPDATE
---------------------------------------------------------------
IF V_INS_FLAG = 'Y' THEN
----------------------------------------------------
-- 연체정보원장 INSERT
----------------------------------------------------
BEGIN
INSERT INTO TBP002_OV
(
CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,MB_ENP_CD
,ACNO
,CO_BZNO
,MNG_BR_CD
,MNG_BR_NM
,SBJ_CD
,REG_RCD
,REG_RSN_OCC_DT
,TX_FCD
,OV_CLS
,XPIR_AF_OV_YN
,OV_BCDT
,TLIM_PF_LOS_DD
,LON_RM
,OV_AM
,RLS_YN
,RLS_DT
,IN_CHNL
,UPD_DT
,CEMNO
)
VALUES
(
trl002_rec.CO_PID
,DECODE(trl002_rec.CO_INDV_CLS,'1','3','1')
,trl002_rec.MB_ENP_CD
,trl002_rec.ACNO
,trl002_rec.BZNO
,trl002_rec.MNG_BR_CD
,trl002_rec.MNG_BR_NM
,trl002_rec.SBJ_CD
,trl002_rec.REG_RCD
,trl002_rec.REG_RSN_OCC_DT
,trl002_rec.TX_FCD
,trl002_rec.OV_CLS
,trl002_rec.XPIR_AF_OV_YN
,trl002_rec.OV_BCDT
,trl002_rec.TLIM_PF_LOS_DT
,trl002_rec.LON_RM
,trl002_rec.OV_AM
,'N'
,''
,'01'
,SYSDATE
,'MSTUPD'
)
;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('법인 기등록된 계좌입니다.'||trl002_rec.ACNO);
V_ERR_CODE := 'E103';
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP002_OV INSERT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.ACNO);
V_ERR_CODE := 'E901';
END;
ELSE
---------------------------------------------------------------
-- 변동분 CHECK
---------------------------------------------------------------
IF TRIM(trl002_rec.MNG_BR_CD) != TBP002_ROW.MNG_BR_CD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.MNG_BR_NM) != TBP002_ROW.MNG_BR_NM THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.SBJ_CD) != TBP002_ROW.SBJ_CD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.REG_RCD) != TBP002_ROW.REG_RCD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.REG_RSN_OCC_DT) != TBP002_ROW.REG_RSN_OCC_DT THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.TX_FCD) != TBP002_ROW.TX_FCD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.OV_CLS) != TBP002_ROW.OV_CLS THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.XPIR_AF_OV_YN) != TBP002_ROW.XPIR_AF_OV_YN THEN
V_CHANGE_FLAG := 'Y';
ELSIF trl002_rec.LON_RM != TBP002_ROW.LON_RM THEN
V_CHANGE_FLAG := 'Y';
ELSIF trl002_rec.OV_AM != TBP002_ROW.OV_AM THEN
V_CHANGE_FLAG := 'Y';
ELSIF TBP002_ROW.IN_CHNL != '01' THEN
V_CHANGE_FLAG := 'Y';
ELSIF TBP002_ROW.RLS_YN = 'Y' THEN
V_CHANGE_FLAG := 'Y';
ELSE
V_CHANGE_FLAG := 'N';
END IF;
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
------------------------------------------------------------
-- 기업개요(TBP001_OV_ENP_INTR) 테이블 SELECT
------------------------------------------------------------
BEGIN
SELECT 'Y'
INTO V_CHECK_FLAG
FROM TBP001_OV_ENP_INTR
WHERE CO_CTZ_BZNO = trl002_rec.CO_PID
AND CO_CTZ_BZER_CLS = DECODE(trl002_rec.CO_INDV_CLS,'1','3','1')
;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP001_OV_ENP_INTR SELECT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E900';
END;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------
-- 데이터가 존재하면 UPDATE
----------------------------------------------------
IF V_CHECK_FLAG = 'Y' THEN
BEGIN
UPDATE TBP001_OV_ENP_INTR
SET ENP_NM = trl002_rec.ENP_NM
,REPER_NM = trl002_rec.REPER_NM
,MO_ZIP = trl002_rec.MO_ZIP
,MO_ADDRA = trl002_rec.MO_ADDRA
,MO_TEL_NO = trl002_rec.MO_TEL_NO
,BZC_CD = trl002_rec.BZC_CD
,ENP_SZE_CD = trl002_rec.ENP_SZE_CD
,ENP_FCD = trl002_rec.ENP_FCD
,IPO_CD = trl002_rec.IPO_CD
,HPAGE_URL = trl002_rec.HPAGE_URL
,UPD_DT = SYSDATE
,CEMNO = 'MSTUPD'
WHERE CO_CTZ_BZNO = trl002_rec.CO_PID
AND CO_CTZ_BZER_CLS = DECODE(trl002_rec.CO_INDV_CLS,'1','3','1')
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP001_OV_ENP_INTR UPDATE ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E902';
END;
----------------------------------------------------
-- 데이터가 존재하지 않으면 INSERT
----------------------------------------------------
ELSE
BEGIN
INSERT INTO TBP001_OV_ENP_INTR
(
CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,ENP_NM
,REPER_NM
,MO_ZIP
,MO_ADDRA
,MO_TEL_NO
,BZC_CD
,ENP_SZE_CD
,ENP_FCD
,IPO_CD
,HPAGE_URL
,UPD_DT
,CEMNO
)
VALUES
(
trl002_rec.CO_PID
,DECODE(trl002_rec.CO_INDV_CLS,'1','3','1')
,trl002_rec.ENP_NM
,trl002_rec.REPER_NM
,trl002_rec.MO_ZIP
,trl002_rec.MO_ADDRA
,trl002_rec.MO_TEL_NO
,trl002_rec.BZC_CD
,trl002_rec.ENP_SZE_CD
,trl002_rec.ENP_FCD
,trl002_rec.IPO_CD
,trl002_rec.HPAGE_URL
,SYSDATE
,'MSTUPD'
)
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP001_OV_ENP_INTR INSERT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E901';
END;
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
---------------------------------------------------------------------
-- 최초등록이거나 변동분이 존재하면 연체정보변경이력원장에 INSERT
---------------------------------------------------------------------
IF V_INS_FLAG = 'Y' OR V_CHANGE_FLAG = 'Y' THEN
IF V_CHANGE_FLAG = 'Y' THEN
BEGIN
UPDATE TBP002_OV
SET CO_BZNO = trl002_rec.BZNO
,MNG_BR_CD = trl002_rec.MNG_BR_CD
,MNG_BR_NM = trl002_rec.MNG_BR_NM
,SBJ_CD = trl002_rec.SBJ_CD
,REG_RCD = trl002_rec.REG_RCD
,REG_RSN_OCC_DT = trl002_rec.REG_RSN_OCC_DT
,TX_FCD = trl002_rec.TX_FCD
,OV_CLS = trl002_rec.OV_CLS
,XPIR_AF_OV_YN = trl002_rec.XPIR_AF_OV_YN
,OV_BCDT = trl002_rec.OV_BCDT
,TLIM_PF_LOS_DD = trl002_rec.TLIM_PF_LOS_DT
,LON_RM = trl002_rec.LON_RM
,OV_AM = trl002_rec.OV_AM
,RLS_YN = 'N'
,RLS_DT = ''
,IN_CHNL = '01'
,UPD_DT = SYSDATE
,CEMNO = 'MSTUPD'
WHERE CO_CTZ_BZNO = trl002_rec.CO_PID
AND CO_CTZ_BZER_CLS = DECODE(trl002_rec.CO_INDV_CLS,'1','3','1')
AND MB_ENP_CD = trl002_rec.MB_ENP_CD
AND ACNO = trl002_rec.ACNO
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP002_OV UPDATE ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.ACNO);
V_ERR_CODE := 'E902';
END;
END IF;
BEGIN
INSERT INTO TBP102_OV_CHG_HIS
(
BASE_DT
,BASE_TM
,CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,MB_ENP_CD
,ACNO
,CO_BZNO
,MNG_BR_CD
,MNG_BR_NM
,SBJ_CD
,REG_RCD
,REG_RSN_OCC_DT
,TX_FCD
,OV_CLS
,XPIR_AF_OV_YN
,OV_BCDT
,TLIM_PF_LOS_DD
,LON_RM
,OV_AM
,RLS_YN
,RLS_DT
,IN_CHNL
,UPD_DT
,CEMNO
)
SELECT P_IN_BASE_DT
,V_WORK_TIME
,CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,MB_ENP_CD
,ACNO
,CO_BZNO
,MNG_BR_CD
,MNG_BR_NM
,SBJ_CD
,REG_RCD
,REG_RSN_OCC_DT
,TX_FCD
,OV_CLS
,XPIR_AF_OV_YN
,OV_BCDT
,TLIM_PF_LOS_DD
,LON_RM
,OV_AM
,RLS_YN
,RLS_DT
,IN_CHNL
,SYSDATE
,CEMNO
FROM TBP002_OV
WHERE CO_CTZ_BZNO = trl002_rec.CO_PID
AND CO_CTZ_BZER_CLS = DECODE(trl002_rec.CO_INDV_CLS,'1','3','1')
AND MB_ENP_CD = trl002_rec.MB_ENP_CD
AND ACNO = trl002_rec.ACNO
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP102_OV_CHG_HIS INSERT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E901';
END;
END IF;
END IF;
V_INS_FLAG := 'N';
---------------------------------------------------
-- 사업자번호가 존재하면 사업자번호로 INSERT
---------------------------------------------------
IF trl002_rec.BZNO != ' ' THEN
------------------------------------------------------
-- 연체정보원장에 기반영여부 CHECK
------------------------------------------------------
BEGIN
SELECT NVL(RLS_YN, ' ') -- 해제여부
,NVL(RLS_DT, ' ') -- 해제일자
,NVL(IN_CHNL, ' ') -- 유입경로
,NVL(MNG_BR_CD, ' ')
,NVL(MNG_BR_NM, ' ')
,NVL(SBJ_CD, ' ')
,NVL(REG_RCD, ' ')
,NVL(REG_RSN_OCC_DT, ' ')
,NVL(TX_FCD, ' ')
,NVL(OV_CLS, ' ')
,NVL(XPIR_AF_OV_YN, ' ')
,NVL(OV_BCDT, ' ')
,NVL(TLIM_PF_LOS_DD, ' ')
,NVL(LON_RM, 0)
,NVL(OV_AM, 0)
,UPD_DT
INTO TBP002_ROW.RLS_YN
,TBP002_ROW.RLS_DT
,TBP002_ROW.IN_CHNL
,TBP002_ROW.MNG_BR_CD
,TBP002_ROW.MNG_BR_NM
,TBP002_ROW.SBJ_CD
,TBP002_ROW.REG_RCD
,TBP002_ROW.REG_RSN_OCC_DT
,TBP002_ROW.TX_FCD
,TBP002_ROW.OV_CLS
,TBP002_ROW.XPIR_AF_OV_YN
,TBP002_ROW.OV_BCDT
,TBP002_ROW.TLIM_PF_LOS_DD
,TBP002_ROW.LON_RM
,TBP002_ROW.OV_AM
,TBP002_ROW.UPD_DT
FROM TBP002_OV
WHERE CO_CTZ_BZNO = trl002_rec.BZNO
AND CO_CTZ_BZER_CLS = '2'
AND MB_ENP_CD = trl002_rec.MB_ENP_CD
AND ACNO = trl002_rec.ACNO
;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_INS_FLAG := 'Y';
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP002_OV SELECT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.ACNO);
V_ERR_CODE := 'E900';
END;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------------
-- 온라인으로 해제한 일자가 작업기준일자보다 크면 SKIP
----------------------------------------------------------
IF TBP002_ROW.RLS_YN = 'Y' AND TBP002_ROW.IN_CHNL >= '10' AND TBP002_ROW.RLS_DT > P_IN_BASE_DT THEN
DBMS_OUTPUT.PUT_LINE('온라인해제건이 존재하여 연체정보등록을 할수없습니다.'||trl002_rec.ACNO);
V_ERR_CODE := 'E301';
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------------
-- 온라인으로 등재한 일자가 작업기준일자보다 크면 SKIP
----------------------------------------------------------
IF TBP002_ROW.RLS_YN = 'N' AND TBP002_ROW.IN_CHNL >= '10' AND TO_CHAR(TBP002_ROW.UPD_DT,'YYYYMMDD') >= P_IN_BASE_DT THEN
DBMS_OUTPUT.PUT_LINE('온라인등재건이 존재하여 연체정보등록을 할수없습니다.'||trl002_rec.ACNO);
V_ERR_CODE := 'E302';
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------------
-- 이미 배치로 등록한 정보가 있으면 SKIP
----------------------------------------------------------
-- IF TBP002_ROW.RLS_YN = 'N' AND TBP002_ROW.IN_CHNL < '10' THEN
-- DBMS_OUTPUT.PUT_LINE('등재건이 존재하여 연체정보등록을 할수없습니다.'||trl002_rec.ACNO);
-- V_ERR_CODE := 'E103';
-- END IF;
--
-- IF V_ERR_CODE != '0000' THEN
-- RAISE RAISE_CONTINUE;
-- END IF;
---------------------------------------------------------------
-- 최초등록요청인 경우 INSERT, 해제후 재등록거래인경우 UPDATE
---------------------------------------------------------------
IF V_INS_FLAG = 'Y' THEN
----------------------------------------------------
-- 연체정보원장 INSERT
----------------------------------------------------
BEGIN
INSERT INTO TBP002_OV
(
CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,MB_ENP_CD
,ACNO
,CO_BZNO
,MNG_BR_CD
,MNG_BR_NM
,SBJ_CD
,REG_RCD
,REG_RSN_OCC_DT
,TX_FCD
,OV_CLS
,XPIR_AF_OV_YN
,OV_BCDT
,TLIM_PF_LOS_DD
,LON_RM
,OV_AM
,RLS_YN
,RLS_DT
,IN_CHNL
,UPD_DT
,CEMNO
)
VALUES
(
trl002_rec.BZNO
,'2'
,trl002_rec.MB_ENP_CD
,trl002_rec.ACNO
,trl002_rec.CO_PID
,trl002_rec.MNG_BR_CD
,trl002_rec.MNG_BR_NM
,trl002_rec.SBJ_CD
,trl002_rec.REG_RCD
,trl002_rec.REG_RSN_OCC_DT
,trl002_rec.TX_FCD
,trl002_rec.OV_CLS
,trl002_rec.XPIR_AF_OV_YN
,trl002_rec.OV_BCDT
,trl002_rec.TLIM_PF_LOS_DT
,trl002_rec.LON_RM
,trl002_rec.OV_AM
,'N'
,''
,'01'
,SYSDATE
,'MSTUPD'
)
;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('사업자 기등록된 계좌입니다.'||trl002_rec.ACNO);
V_ERR_CODE := 'E103';
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP002_OV INSERT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.ACNO);
V_ERR_CODE := 'E901';
END;
---------------------------------------------------------------
-- 변동분 CHECK
---------------------------------------------------------------
ELSE
---------------------------------------------------------------
-- 변동분 CHECK
---------------------------------------------------------------
IF TRIM(trl002_rec.MNG_BR_CD) != TBP002_ROW.MNG_BR_CD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.MNG_BR_NM) != TBP002_ROW.MNG_BR_NM THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.SBJ_CD) != TBP002_ROW.SBJ_CD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.REG_RCD) != TBP002_ROW.REG_RCD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.REG_RSN_OCC_DT) != TBP002_ROW.REG_RSN_OCC_DT THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.TX_FCD) != TBP002_ROW.TX_FCD THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.OV_CLS) != TBP002_ROW.OV_CLS THEN
V_CHANGE_FLAG := 'Y';
ELSIF TRIM(trl002_rec.XPIR_AF_OV_YN) != TBP002_ROW.XPIR_AF_OV_YN THEN
V_CHANGE_FLAG := 'Y';
ELSIF trl002_rec.LON_RM != TBP002_ROW.LON_RM THEN
V_CHANGE_FLAG := 'Y';
ELSIF trl002_rec.OV_AM != TBP002_ROW.OV_AM THEN
V_CHANGE_FLAG := 'Y';
ELSIF TBP002_ROW.IN_CHNL != '01' THEN
V_CHANGE_FLAG := 'Y';
ELSIF TBP002_ROW.RLS_YN = 'Y' THEN
V_CHANGE_FLAG := 'Y';
ELSE
V_CHANGE_FLAG := 'N';
END IF;
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
------------------------------------------------------------
-- 기업개요(TBP001_OV_ENP_INTR) 테이블 SELECT
------------------------------------------------------------
BEGIN
SELECT 'Y'
INTO V_CHECK_FLAG
FROM TBP001_OV_ENP_INTR
WHERE CO_CTZ_BZNO = trl002_rec.BZNO
AND CO_CTZ_BZER_CLS = '2'
;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP001_OV_ENP_INTR SELECT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E900';
END;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
----------------------------------------------------
-- 데이터가 존재하면 UPDATE
----------------------------------------------------
IF V_CHECK_FLAG = 'Y' THEN
BEGIN
UPDATE TBP001_OV_ENP_INTR
SET ENP_NM = trl002_rec.ENP_NM
,REPER_NM = trl002_rec.REPER_NM
,MO_ZIP = trl002_rec.MO_ZIP
,MO_ADDRA = trl002_rec.MO_ADDRA
,MO_TEL_NO = trl002_rec.MO_TEL_NO
,BZC_CD = trl002_rec.BZC_CD
,ENP_SZE_CD = trl002_rec.ENP_SZE_CD
,ENP_FCD = trl002_rec.ENP_FCD
,IPO_CD = trl002_rec.IPO_CD
,HPAGE_URL = trl002_rec.HPAGE_URL
,UPD_DT = SYSDATE
,CEMNO = 'MSTUPD'
WHERE CO_CTZ_BZNO = trl002_rec.BZNO
AND CO_CTZ_BZER_CLS = '2'
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP001_OV_ENP_INTR UPDATE ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E902';
END;
----------------------------------------------------
-- 데이터가 존재하지 않으면 INSERT
----------------------------------------------------
ELSE
BEGIN
INSERT INTO TBP001_OV_ENP_INTR
(
CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,ENP_NM
,REPER_NM
,MO_ZIP
,MO_ADDRA
,MO_TEL_NO
,BZC_CD
,ENP_SZE_CD
,ENP_FCD
,IPO_CD
,HPAGE_URL
,UPD_DT
,CEMNO
)
VALUES
(
trl002_rec.BZNO
,'2'
,trl002_rec.ENP_NM
,trl002_rec.REPER_NM
,trl002_rec.MO_ZIP
,trl002_rec.MO_ADDRA
,trl002_rec.MO_TEL_NO
,trl002_rec.BZC_CD
,trl002_rec.ENP_SZE_CD
,trl002_rec.ENP_FCD
,trl002_rec.IPO_CD
,trl002_rec.HPAGE_URL
,SYSDATE
,'MSTUPD'
)
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP001_OV_ENP_INTR INSERT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E901';
END;
END IF;
IF V_ERR_CODE != '0000' THEN
RAISE RAISE_CONTINUE;
END IF;
---------------------------------------------------------------------
-- 최초등록이거나 변동분이 존재하면 연체정보변경이력원장에 INSERT
---------------------------------------------------------------------
IF V_INS_FLAG = 'Y' OR V_CHANGE_FLAG = 'Y' THEN
IF V_CHANGE_FLAG = 'Y' THEN
BEGIN
UPDATE TBP002_OV
SET CO_BZNO = trl002_rec.CO_PID
,MNG_BR_CD = trl002_rec.MNG_BR_CD
,MNG_BR_NM = trl002_rec.MNG_BR_NM
,SBJ_CD = trl002_rec.SBJ_CD
,REG_RCD = trl002_rec.REG_RCD
,REG_RSN_OCC_DT = trl002_rec.REG_RSN_OCC_DT
,TX_FCD = trl002_rec.TX_FCD
,OV_CLS = trl002_rec.OV_CLS
,XPIR_AF_OV_YN = trl002_rec.XPIR_AF_OV_YN
,OV_BCDT = trl002_rec.OV_BCDT
,TLIM_PF_LOS_DD = trl002_rec.TLIM_PF_LOS_DT
,LON_RM = trl002_rec.LON_RM
,OV_AM = trl002_rec.OV_AM
,RLS_YN = 'N'
,RLS_DT = ''
,IN_CHNL = '01'
,UPD_DT = SYSDATE
,CEMNO = 'MSTUPD'
WHERE CO_CTZ_BZNO = trl002_rec.BZNO
AND CO_CTZ_BZER_CLS = '2'
AND MB_ENP_CD = trl002_rec.MB_ENP_CD
AND ACNO = trl002_rec.ACNO
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP002_OV UPDATE ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.ACNO);
V_ERR_CODE := 'E902';
END;
END IF;
BEGIN
INSERT INTO TBP102_OV_CHG_HIS
(
BASE_DT
,BASE_TM
,CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,MB_ENP_CD
,ACNO
,CO_BZNO
,MNG_BR_CD
,MNG_BR_NM
,SBJ_CD
,REG_RCD
,REG_RSN_OCC_DT
,TX_FCD
,OV_CLS
,XPIR_AF_OV_YN
,OV_BCDT
,TLIM_PF_LOS_DD
,LON_RM
,OV_AM
,RLS_YN
,RLS_DT
,IN_CHNL
,UPD_DT
,CEMNO
)
SELECT P_IN_BASE_DT
,V_WORK_TIME
,CO_CTZ_BZNO
,CO_CTZ_BZER_CLS
,MB_ENP_CD
,ACNO
,CO_BZNO
,MNG_BR_CD
,MNG_BR_NM
,SBJ_CD
,REG_RCD
,REG_RSN_OCC_DT
,TX_FCD
,OV_CLS
,XPIR_AF_OV_YN
,OV_BCDT
,TLIM_PF_LOS_DD
,LON_RM
,OV_AM
,RLS_YN
,RLS_DT
,IN_CHNL
,SYSDATE
,CEMNO
FROM TBP002_OV
WHERE CO_CTZ_BZNO = trl002_rec.BZNO
AND CO_CTZ_BZER_CLS = '2'
AND MB_ENP_CD = trl002_rec.MB_ENP_CD
AND ACNO = trl002_rec.ACNO
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TBP102_OV_CHG_HIS INSERT ERROR '||SUBSTR(SQLERRM,1,300)||trl002_rec.CO_PID);
V_ERR_CODE := 'E901';
ROLLBACK;
END;
END IF;
END IF;
COMMIT;
EXCEPTION
WHEN RAISE_CONTINUE THEN
ROLLBACK;
V_ACCT_NO := '';
V_PERS_GBN := '';
V_CONO_PID := '';
V_BSN_NO := '';
V_SEQ_NO := '';
V_SEND_DATA := '';
SELECT TO_CHAR(SYSDATE, 'HH24MISS')
,ACNO
,CO_INDV_CLS
,CO_PID
,BZNO
,SPC_SEQ
,'S'
||SPC_SEQ
||MB_ENP_CD
||CO_INDV_CLS
||RPAD(NVL(BZNO,' '),10,' ')
||RPAD(NVL(CO_PID,' '),13,' ')
||RPAD(NVL(ENP_NM,' '),50,' ')
||RPAD(NVL(REPER_NM, ' '),50,' ')
||RPAD(NVL(MO_ZIP,' '),6,' ')
||RPAD(NVL(MO_ADDRA,' '),100,' ')
||RPAD(NVL(MO_TEL_NO,' '),20,' ')
||RPAD(NVL(BZC_CD, ' '),6,' ')
||RPAD(NVL(ENP_SZE_CD,' '),2,' ')
||RPAD(NVL(ENP_FCD,' '),2,' ')
||RPAD(NVL(IPO_CD,' '),2,' ')
||RPAD(NVL(HPAGE_URL,' '),123,' ')
||'S01'
||RPAD(NVL(ACNO,' '),25,' ')
||RPAD(NVL(MNG_BR_CD,' '),10,' ')
||RPAD(NVL(MNG_BR_NM,' '),30,' ')
||RPAD(NVL(SBJ_CD,' '),3,' ')
||RPAD(NVL(REG_RCD,' '),4,' ')
||RPAD(NVL(REG_RSN_OCC_DT,' '),8,' ')
||RPAD(NVL(TX_FCD,' '),2,' ')
||RPAD(NVL(OV_CLS,' '),2,' ')
||RPAD(NVL(XPIR_AF_OV_YN,' '),1,' ')
||RPAD(NVL(OV_BCDT,' '),8,' ')
||RPAD(NVL(TLIM_PF_LOS_DT,' '),8,' ')
||LPAD(TO_CHAR(LON_RM),15,'0')
||LPAD(TO_CHAR(OV_AM),15,'0')
INTO
V_WORK_TIME
,V_ACCT_NO
,V_PERS_GBN
,V_CONO_PID
,V_BSN_NO
,V_SEQ_NO
,V_SEND_DATA
FROM TRL002_OV_RCV_LOG
WHERE MB_ENP_CD = P_IN_BANK_CD
AND CO_PID = trl002_rec.CO_PID
AND BZNO = trl002_rec.BZNO
AND ACNO = trl002_rec.ACNO
AND SPC_SEQ = trl002_rec.SPC_SEQ
;
BEGIN
UDP_ERR_INSERT(P_IN_BASE_DT,
V_WORK_TIME,
V_ACCT_NO,
P_IN_BANK_CD,
V_PERS_GBN,
V_CONO_PID,
V_BSN_NO,
'M01',
V_SEND_DATA,
V_SEQ_NO,
V_ERR_CODE);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('TBP009_REG_ERR_RPT_OBJ_HIS INSERT ERROR!'||SQLCODE );
END;
DBMS_OUTPUT.PUT_LINE('RAISE CONTINUE FIRE..');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('OV_LOG_C FETCH ERROR');
EXIT;
END;
END LOOP;
CLOSE OV_LOG_C;
-- 원장반영 건수
BEGIN
SELECT COUNT(*)
INTO V_SUCCESS_CNT
FROM TRL002_OV_RCV_LOG B
WHERE MB_ENP_CD = P_IN_BANK_CD
AND SPC_SEQ NOT IN
(SELECT SUBSTR(RCV_D,2,10)
FROM TBP009_REG_ERR_RPT_OBJ_HIS
WHERE BASE_DT = P_IN_BASE_DT
AND MB_ENP_CD = P_IN_BANK_CD
AND SGMT_ID = 'E01' ) ;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('원장반영 건수 SELECT ERROR '||'S01'||P_IN_BANK_CD||P_IN_BASE_DT||SUBSTR(SQLERRM,1,400));
RAISE RAISE_FORCE_EXIT;
END;
-- 집계원장 UPDATE
BEGIN
UDP_SUM_UPDATE('01',
V_SUCCESS_CNT,
P_IN_BANK_CD,
'S01',
P_IN_BASE_DT,
V_RET_CODE);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('집계원장 UPDATE ERROR '||'S01'||P_IN_BANK_CD||P_IN_BASE_DT||SUBSTR(SQLERRM,1,400));
RAISE RAISE_FORCE_EXIT;
END;
------------------------------------------------------------------------------------------
-- 송수신관리원장의 처리상태를 처리완료 ('2')으로 변경한다.
------------------------------------------------------------------------------------------
BEGIN
UDP_FTP_INFO('M',
'2',
0,
'',
P_IN_BANK_CD,
'B06',
'M',
P_IN_BASE_DT,
V_RET_CODE);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('화일송수신 UPDATE ERROR '||'B06'||P_IN_BANK_CD||P_IN_BASE_DT||SUBSTR(SQLERRM,1,400));
RAISE RAISE_FORCE_EXIT;
END;
COMMIT;
DBMS_OUTPUT.PUT_LINE('* 수신LOG연체원장반영 처리종료!!!');
EXCEPTION
WHEN RAISE_FORCE_EXIT THEN
ROLLBACK;
--DBMS_OUTPUT.PUT_LINE('FORCE EXIT FIRE');
null;
WHEN NO_DATA_FOUND THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('DATA NOT FOUND ! '||SUBSTR(SQLERRM,1,300));
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('MAIN EXCEPTION FILE! '||SUBSTR(SQLERRM,1,300));
------------------------------------------------------------------------------------------
-- 송수신관리원장의 처리상태를 처리완료 ('2')으로 변경한다.
------------------------------------------------------------------------------------------
BEGIN
UDP_FTP_INFO('M',
'9',
V_SUCCESS_CNT,
SUBSTR(SQLERRM,1,400),
P_IN_BANK_CD,
'B06',
'M',
P_IN_BASE_DT,
V_RET_CODE);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('화일송수신 UPDATE ERROR '||'B06'||P_IN_BANK_CD||P_IN_BASE_DT||SUBSTR(SQLERRM,1,400));
RAISE RAISE_FORCE_EXIT;
END;
COMMIT;
END UDP_MST_UPDATE;
오라클,sql튜닝,oracle개발,hint,실행계획,아키텍쳐,오라클구조