혹시나 아직 플그래밍 입문이거나 한참 하고있는 넘들중에
쿼리 짤때 동적쿼리로 좀 짜지 마라 두번짜지 마라 세번짜지 마라
아오 조ㄹ 라 빡쳐서 ㄴㅣㅁㅣ 아오 이런 수박
이전에 프로젝트에서 한 초보 코더랑 나름 10년이상 짬밥있다는 차장이 플젝트 님 내에서 한 업무 팀맡아서 하던거 두사람다 나가서
물려 받았는데 프로시져 하나 뜯을때마다 욕이 절로나온다
유지보수 할꺼 생각해서라도 동적쿼리 짜면 진짜 뒤진다
짠사람도 모른다 볼사람도 모른다
한눈에 들어오는게 없다 니미..
어디가 FROM 절이고 어디가 웨어절이고 아놔 미나어미아ㅓ빚럽
절때 동적쿼리 쓰지 말아라.....플그래밍 입문자들 동적쿼리 알려줘도 절대좀 쓰지마라
어쩔수 없다고 동적 쿼리 짜라는것도 잘찾아보면 답 없는거 없다 정적 쿼리좀 쓰자 제발
CREATE OR REPLACE PROCEDURE NEOE.UP_CG_C_CUST_PRE_SELECT1 (
P_CD_COMPANY IN VARCHAR2 DEFAULT NULL, -- 회사코드
P_DT_SPLY_FROM IN VARCHAR2 DEFAULT \'00000000\', -- 공급일자
P_DT_SPLY_TO IN VARCHAR2 DEFAULT \'99999999\', -- 공급일자
P_CD_ZONE IN VARCHAR2 DEFAULT NULL, -- 지역관리소
P_CHA_ISPT IN VARCHAR2 DEFAULT NULL, -- 차수
P_GB_PAYTM IN VARCHAR2 DEFAULT NULL, -- 납기구분
P_GB_AREA IN VARCHAR2 DEFAULT \'\', -- 순로구분
P_CD_AREA_ISPT IN VARCHAR2 DEFAULT \'\', -- 검침구역
P_CD_DONG IN VARCHAR2 DEFAULT \'\', -- 법정동
P_CD_BLD IN VARCHAR2 DEFAULT \'\', -- 건물
P_GB_HS IN VARCHAR2 DEFAULT \'\', -- 주택구분
P_YN_EMP IN VARCHAR2 , -- 관리담당자(Y:유, N:무, 공백)
P_GB_ISPT IN VARCHAR2 , -- 안전점검
RC1 OUT SYS_REFCURSOR
)
AS
/*******************************************
** System : -- 통합정보시스템
** Sub System : 고객관리 > 고객정보
** Page : 검침및 점검담당자 등록(건물 조회)
** Desc : UP_CG_C_CUST_PRE_SELECT1
** Return Values
** 작 성 자 : choi
** 작 성 일 : 2010.05.08
** 수 정 자 :
********************************************
** Change History
*********************************************
*********************************************/
V_SELECT VARCHAR2(3000);
V_WHERE1 VARCHAR2(3000);
V_WHERE2 VARCHAR2(2000);
V_WHERE3 VARCHAR2(1000);
V_ORDER VARCHAR2(1000);
BEGIN
--ELSE
--END IF;
V_SELECT :=V_SELECT ||\'SELECT A.CD_COMPANY, A.CD_ZONE,A.CD_DONG,A.CD_BLD,A.NM_BLD, A.NM_TERR, \'\'\'\' AS ERR_MSG, A.CNT, \';
V_SELECT :=V_SELECT ||\' A.NEW_ADDR,A.OLD_ADDR,CD_TERR, CD_TERR AS OLD_TERR ,GB_AREA ,GB_PAYTM ,CHK, \'\'\' || P_CHA_ISPT || \'\'\' AS CHA_ISPT,\';
IF P_GB_AREA = \'01\' THEN --검침
V_SELECT :=V_SELECT ||\' FN_CG_GET_NM(A.CD_COMPANY,\'\'CG_C_CHARG\'\',A.CD_ZONE,\'\'01\'\',A.OLD_TERR) NM_OLD_TERR\';
ELSE
V_SELECT :=V_SELECT ||\' FN_CG_GET_NM(A.CD_COMPANY,\'\'CG_C_CHARG\'\',A.CD_ZONE,\'\'02\'\',A.OLD_TERR) NM_OLD_TERR\';
END IF;
V_SELECT :=V_SELECT ||\' FROM ( SELECT A.CD_COMPANY, A.CD_ZONE,\';
V_SELECT :=V_SELECT ||\' A.CD_DONG,A.CD_BLD,B.NM_BLD, COUNT(A.NO_CUST) AS CNT, \';
V_SELECT :=V_SELECT ||\' C.ADDR_SIDO || \'\' \'\'|| C.ADDR_GUGUN || \'\' \'\'|| B.ADDR_ROAD || \'\' \'\' ||B.L_ADDR || DECODE(NVL(B.S_ADDR,\'\' \'\'), \'\' \'\', \'\'\'\', \'\'-\'\' || B.S_ADDR) AS NEW_ADDR,\';
V_SELECT :=V_SELECT ||\' C.ADDR_DONG || \'\' \'\'|| B.L_LOT || \'\' \'\'|| DECODE(NVL(B.S_LOT,\'\' \'\'), \'\' \'\', \'\'\'\', \'\'-\'\' || B.S_LOT) AS OLD_ADDR,\';
IF P_GB_AREA = \'01\' THEN --검침
V_SELECT :=V_SELECT ||\' MAX(A.CD_TERR_ISPT) AS CD_TERR,\';
V_SELECT :=V_SELECT ||\' FN_CG_GET_NM(A.CD_COMPANY,\'\'CG_C_CHARG\'\',A.CD_ZONE,\'\'01\'\',MAX(A.CD_TERR_ISPT)) NM_TERR, \';
V_SELECT :=V_SELECT ||\' decode(NVL(MAX(A.CD_TERR_ISPT),\'\' \'\'), \'\' \'\',\';
V_SELECT :=V_SELECT ||\' FN_CG_GET_C_FIND_TERR(A.CD_COMPANY,\'\'1\'\',\'\'\'||P_GB_PAYTM ||\'\'\',A.CD_BLD)\';
V_SELECT :=V_SELECT ||\' ,MAX(A.CD_TERR_ISPT)) OLD_TERR,\';
V_SELECT :=V_SELECT ||\' \'\'01\'\' GB_AREA,\';
V_SELECT :=V_SELECT ||\' \'\'\'||P_GB_PAYTM ||\'\'\' as GB_PAYTM,\';
ELSE
V_SELECT :=V_SELECT ||\' MAX(A.CD_TERR_INSP) AS CD_TERR,\';
V_SELECT :=V_SELECT ||\' FN_CG_GET_NM(A.CD_COMPANY,\'\'CG_C_CHARG\'\',A.CD_ZONE,\'\'02\'\', MAX(A.CD_TERR_INSP)) NM_TERR,\';
V_SELECT :=V_SELECT ||\' decode(NVL( MAX(A.CD_TERR_INSP),\'\' \'\'), \'\' \'\',\';
V_SELECT :=V_SELECT ||\' FN_CG_GET_C_FIND_TERR(A.CD_COMPANY,\'\'2\'\',\'\'\'||P_GB_PAYTM ||\'\'\',A.CD_BLD)\';
V_SELECT :=V_SELECT ||\' , MAX(A.CD_TERR_INSP)) OLD_TERR,\';
V_SELECT :=V_SELECT ||\' \'\'02\'\' GB_AREA,\';
V_SELECT :=V_SELECT ||\' \'\'\'||P_GB_PAYTM ||\'\'\' as GB_PAYTM,\';
END IF;
V_SELECT :=V_SELECT ||\' \'\'N\'\' CHK\';
V_SELECT :=V_SELECT ||\' FROM CG_C_CUST A,CG_Z_BLD B ,CG_Z_DONG C, CG_U_USER D \';
V_WHERE1 := \' WHERE A.CD_COMPANY = \'\'\'||P_CD_COMPANY ||\'\'\'\';
V_WHERE1 := V_WHERE1 ||\' AND NVL(TRIM(A.DT_MAINCHG), \'\'\'|| P_DT_SPLY_FROM ||\'\'\') >= \'\'\'||P_DT_SPLY_FROM ||\'\'\'\';
V_WHERE1 := V_WHERE1 ||\' AND NVL(TRIM(A.DT_MAINCHG), \'\'\'|| P_DT_SPLY_FROM ||\'\'\') <= \'\'\'|| P_DT_SPLY_TO||\'\'\'\';
V_WHERE1 := V_WHERE1 ||\' AND A.CHA_ISPT = \'\'\'|| P_CHA_ISPT||\'\'\'\';
V_WHERE1 := V_WHERE1 ||\' AND A.CD_COMPANY = C.CD_COMPANY\';
V_WHERE1 := V_WHERE1 ||\' AND A.CD_DONG = C.CD_DONG\';
V_WHERE1 := V_WHERE1 ||\' AND A.CD_COMPANY = B.CD_COMPANY\';
V_WHERE1 := V_WHERE1 ||\' AND A.CD_BLD = B.CD_BLD\';
V_WHERE1 := V_WHERE1 ||\' AND A.CD_COMPANY = D.CD_COMPANY(+)\';
V_WHERE1 := V_WHERE1 ||\' AND A.CD_FCLT_BLD = D.CD_FCLT_BLD(+)\';
V_WHERE1 := V_WHERE1 ||\' AND A.ST_CUST NOT IN (\'\'40\'\', \'\'34\'\') \';
IF P_GB_AREA = \'02\' THEN
V_WHERE1 := V_WHERE1 ||\' AND D.GB_FCLT <> \'\'10\'\' \';
END IF;
IF NVL(P_GB_PAYTM, \' \') <> \' \' THEN
V_WHERE1 := V_WHERE1 ||\' AND A.GB_PAYTM IN ( SELECT CD_SYSDEF \';
V_WHERE1 := V_WHERE1 ||\' FROM MA_CODEDTL \';
V_WHERE1 := V_WHERE1 ||\' WHERE CD_COMPANY =\'\'\'||P_CD_COMPANY ||\'\'\'\';
V_WHERE1 := V_WHERE1 ||\' AND CD_FIELD = \'\'CG_C_00015\'\'\';
V_WHERE1 := V_WHERE1 ||\' AND CD_FLAG2 = \'\'\'|| P_GB_PAYTM||\'\'\'\';
V_WHERE1 := V_WHERE1 ||\' ) \' ;
END IF;
IF NVL(P_CD_ZONE,\' \') != \' \' THEN
V_WHERE1 := V_WHERE1 ||\' AND A.CD_ZONE =\'\'\'|| P_CD_ZONE || \'\'\'\';
END IF;
IF NVL(P_CD_DONG,\' \') != \' \' THEN
V_WHERE1 := V_WHERE1 ||\' AND A.CD_DONG =\'\'\'|| P_CD_DONG || \'\'\'\';
END IF;
IF NVL(P_CD_BLD,\' \') != \' \' THEN
V_WHERE1 := V_WHERE1 ||\' AND A.CD_BLD =\'\'\'|| P_CD_BLD || \'\'\'\';
END IF;
IF NVL(P_GB_HS,\' \') != \' \' THEN
V_WHERE1 := V_WHERE1 ||\' AND B.GB_HS =\'\'\'|| P_GB_HS || \'\'\'\';
END IF;
IF P_GB_AREA = \'01\' THEN
IF NVL(P_CD_AREA_ISPT,\' \') != \' \' AND P_CD_AREA_ISPT <> \'%\' THEN
V_WHERE2:= V_WHERE2 ||\' AND A.CD_TERR_ISPT = \'\'\' || P_CD_AREA_ISPT || \'\'\'\';
END IF;
IF NVL( P_YN_EMP ,\' \') =\'Y\' THEN-- 관리담당자(Y:유, N:무, 공백)
V_WHERE2:= V_WHERE2 ||\' AND NVL(A.CD_TERR_ISPT, \'\' \'\') <> \'\' \'\'\';
ELSIF NVL( P_YN_EMP ,\' \') =\'N\' THEN-- 관리담당자(Y:유, N:무, 공백)
V_WHERE2:= V_WHERE2 ||\' AND NVL(A.CD_TERR_ISPT, \'\' \'\') = \'\' \'\'\';
END IF;
ELSIF P_GB_AREA = \'02\' THEN
IF NVL(P_CD_AREA_ISPT,\' \') != \' \' AND P_CD_AREA_ISPT <> \'%\' THEN
V_WHERE2:= V_WHERE2 ||\' AND A.CD_TERR_INSP = \'\'\' || P_CD_AREA_ISPT || \'\'\'\';
END IF;
IF NVL( P_YN_EMP ,\' \') =\'Y\' THEN -- 관리담당자(Y:유, N:무, 공백)
V_WHERE2:= V_WHERE2 || \' AND NVL(A.CD_TERR_INSP, \'\' \'\') <> \'\' \'\'\';
ELSIF NVL( P_YN_EMP ,\' \') =\'N\' THEN -- 관리담당자(Y:유, N:무, 공백)
V_WHERE2:= V_WHERE2 ||\' AND NVL(A.CD_TERR_INSP, \'\' \'\') = \'\' \'\'\';
V_WHERE2:= V_WHERE2 ||\' AND D.GB_FCLT <> \'\'10\'\' \';
END IF;
V_WHERE2:= V_WHERE2 || \' AND B.YM_INSP1 LIKE \'\'\' || P_GB_ISPT || \'\'\' || \'\'%\'\' \';
-- IF (NVL(P_GB_ISPT,\'\') <> \'\') THEN
-- V_WHERE2:= V_WHERE2 || \' AND B.YM_INSP1 = \'\'\' || P_GB_ISPT || \'\'\' \';
-- END IF;
END IF;
V_WHERE2 := V_WHERE2 ||\' GROUP BY A.CD_COMPANY, A.CD_ZONE,A.CD_DONG,A.CD_BLD, B.NM_BLD, C.ADDR_SIDO , C.ADDR_GUGUN,\';
V_WHERE2 := V_WHERE2 ||\' B.ADDR_ROAD ,B.L_ADDR, B.S_ADDR,\';
V_WHERE2 := V_WHERE2 ||\' C.ADDR_DONG, B.L_LOT ,B.S_LOT, DECODE(\'\'\' || P_GB_AREA || \'\'\', \'\'01\'\', A.CD_TERR_ISPT, A.CD_TERR_INSP) )A \';
V_ORDER := \' ORDER BY A.CD_COMPANY,A.CD_DONG,A.CD_BLD \' ;
-- RAISE_APPLICATION_ERROR (-20001, \'UP_CG_C_CUST_SELECT10\' || \'=\' || V_WHERE1);
-- RETURN;
DELETE FROM CG_C_TEST;
INSERT INTO CG_C_TEST
(
TEST_SQL
)
VALUES
(
V_SELECT ||V_WHERE1 ||V_WHERE2 || V_WHERE3 || V_ORDER
);
OPEN RC1 FOR
V_SELECT ||V_WHERE1 ||V_WHERE2 || V_WHERE3 || V_ORDER;
RETURN;
EXCEPTION
WHEN OTHERS
THEN
RAISE_APPLICATION_ERROR (-20001, \'UP_CG_C_CUST_PRE_SELECT1\' || SQLERRM);
END UP_CG_C_CUST_PRE_SELECT1;
혹여나 나중에 내 아랫사람이 이따구로 쿼리 코딩하다가 걸리면 진짜 뒤진다
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.