h1.11. STATIC SQL 구현을 위한 기법을
h2.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) )
h2.2) IN-List 항목이 가변적이고 최대 경우 수가 아주 많은 경우
Select * from 수시공시내역
Where 공시일자 = :일자
And :inlist like '%'||분류코드||'%'
h3.1.IN-List 를 사용할 때
Select * from 수시공시내역
Where 공시일자 = :일자
And 분류코드 in ( ....)
? 분류코드+공시일자 인덱스 구성 일 때 유리
h3.2. like 또는 instr 함수를 사용할 때
Select * from 수시공시내역
Where 공시일자 =:일자
And INSTR(:inlist, 분류코드) > 0
? 공시일자+코드분류 인덱스 구성 일 때 유리
h2.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 회원번호
h2.(4) select-list가 동적으로 바뀌는 경우
Decode 및 case 를 활용
h2.(5) 연산자가 바뀌는 경우
칼럼 데이터 사이즈에 따른 이하/미만/이상/초과의 계산