by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

Static SQL 구현을 위한 기법들




11. STATIC SQL 구현을 위한 기법을

1) IN-List 항목이 가변적이지만 최대 경우 수가 적은 경우

Select * from LP회원 WHERE 회원번호 in 회원번호 in ( :a, :b, :c)

Select * from LP회원
WHRE 회원번호 in ( decode (:a, 'all','01',:b)
                   ,decode(:a, 'all,'02',:c)
                   ,decode(:a, 'all','03',;d) )

2) IN-List 항목이 가변적이고 최대 경우 수가 아주 많은 경우

Select * from 수시공시내역
Where 공시일자 = :일자
And    :inlist like '%'||분류코드||'%'

1.IN-List 를 사용할 때

 Select * from 수시공시내역
 Where 공시일자 = :일자
 And 분류코드 in ( ....)

? 분류코드+공시일자 인덱스 구성 일 때 유리

2. like 또는 instr 함수를 사용할 때

Select * from 수시공시내역
Where 공시일자 =:일자
And    INSTR(:inlist, 분류코드) > 0
? 공시일자+코드분류 인덱스 구성 일 때 유리

3) 체크 조건 적용이 가변적인 경우

SELECT 회원번호, SUM(체결건수), SUM(체결수량), SUM(거래대금)
FROM 일별거래실적 e
Where 거래일자 = :trd_dd
AND   시장구분 = '유가'
AND EXISTS (
     SELECT 'X'
     FROM 종목
     WHERE 종목코드 = e.종목코드
     And 코스피종목편입여부 ='Y'
)
GROUP BY 회원번호
?
SELECT 회원번호, SUM(체결건수), SUM(체결수량), SUM(거래대금)
FROM 일별거래실적 e
Where 거래일자 = :trd_dd
AND   시장구분 = '유가'
AND EXISTS (
     SELECT 'X' FROM DUAL where :CHECK_YN ='N'
     UNION ALL
     SELECT 'X' FROM 종목 
     WHERE 종목코드 = e.종목코드
     And 코스피종목편입여부 ='Y'
     AND :check_yn ='Y'
)
GROUP BY 회원번호

(4) select-list가 동적으로 바뀌는 경우

Decode 및 case 를 활용

(5) 연산자가 바뀌는 경우

칼럼 데이터 사이즈에 따른 이하/미만/이상/초과의 계산

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.