부서코드 부서이름 지역
-------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SELECT * FROM DEPT WHERE DEPTNO IN (10);
SELECT * FROM DEPT WHERE DEPTNO IN (10, 20);
SELECT * FROM DEPT WHERE DEPTNO IN (10, 20, 30);
SELECT * FROM DEPT WHERE DEPTNO IN (10, 20, 30, 40);
SELECT * FROM DEPT WHERE DEPTNO IN (20, 30);
SELECT * FROM DEPT WHERE DEPTNO IN (20, 30, 40);
SELECT * FROM DEPT WHERE DEPTNO IN (30, 40);
SELECT * FROM DEPT WHERE DEPTNO IN (40);
SELECT * FROM DEPT WHERE DEPTNO IN (:DEPT1, :DEPT2, :DEPT3, :DEPT4);
SELECT * FROM DEPT WHERE DEPTNO IN ( DECODE(:DEPT1, 'ALL', 10, :a)
, DECODE(:DEPT2, 'ALL', 20, :b)
, DECODE(:DEPT3, 'ALL', 30, :c)
, DECODE(:DEPT4, 'ALL', 40, :d)
);
1) 검색 조건은 정해저 있으나 경우의 수가 많은 경우
:inlist :='01,02,03,04,14,22,23,25';
SELECT * FROM 수시공시내역
FROM 공시일자 = :일자
WHERE :inlist LIKE '%'|| 분류코드 ||'%'
:inlist :='01,02,03,04,14,22,23,25';
SELECT * FROM 수시공시내역
FROM 공시일자 = :일자
WHERE INSTR(:inlist, 분류코드) > 0;
1. IN 을 사용 할경우
SELECT * FROM 수시공시내역
WHERE 공시일자 = :일자
AND 분류코드 IN ( ... )
2. LIKE 혹은 INSTR로 검색 할 경우
SELECT * FROM 수시공시내역
WHERE 공시일자 = :일자
AND INSTR(:INLIST, 분류시드) > 0
exec :inlist := '01030814172433464853';
SELECT /*+ ordered_use_nl(B) */
,b.*
FROM (
SELECT 분류코드
FROM 수시공시분류
WHERE INSTR(:inlist, 분류코드) > 0
)a, 수시공시내역 b
ON b.분류코드 = a.분류코드
exec :inlist := '01030814172433464853';
SELECT /*+ ordered_use_nl(B) */
,b.*
FROM (
SELECT substr(:inlist, (rownum-1)*2 + 1, 2)AS 분류코드
FROM 수시공시분류
WHERE rownum <=length(:inlist) /2
)a, 수시공시내역 b
ON b.분류코드 = a.분류코드
exec :inlist := '01030814172433464853';
SELECT /*+ ordered_use_nl(B) */
,b.*
FROM (
SELECT substr(:inlist, (rownum-1)*2 + 1, 2)AS 분류코드 --데이터를
FROM DUAL
CONNECT BY LEVEL <=length(:inlist) /2
)a, 수시공시내역 b
ON b.분류코드 = a.분류코드
01
03
08
14
17
24
33
46
48
53
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 종목
WHERE 종목코드 = E.종목코드
and 코스피종목편입여부 = DECODE(:check_yn, 'Y', 'Y', 코스피종목편입여부)
)
GROUP BY 회원번호
:trd_dd := '20071228'
:check_yn := 'N'
Call Count CPU Time Elapsed Time Disk Query Current Rows
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Parse 1 0.000 0.000 0 0 0 0
Execute 1 0.000 0.000 0 0 0 0
Fetch 264 0.000 0.000 0 8518 0 2623
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Total 266 0.000 0.000 0 8518 0 2623
Rows Row Source Operation
------ ------------------------------------------------
0 STATEMENT
2623 FILETER (cr=8518 pr=0 pw=0 time=36781 us)
2627 PARTITION RANGE SINGLE PARTITION: 20 20 (cr=641 pr=0 pw=0 time=10547 us)
2627 TABLE ACCESS BY LOCAL INDEX ROWID 일별거래실적 PARTITION: 20 20 (cr=641 ...)
2627 INDEX RANGE SCAN 일별거래실적 X01 PARTITION: 20 20 (cr=274 pr=0 ...)
2623 TABLE ACCESS BY INDEX ROWID 종목 (cr=7877 pr=0 pw=0 time=25166 us)
2623 INDEX RANGE SCAN 종목_PK (cr=5254 pr=0 pw=0 time=16450 us) (Object ID 79702
:trd_dd := '20071228'
:check_yn := 'Y'
Call Count CPU Time Elapsed Time Disk Query Current Rows
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Parse 1 0.000 0.000 0 0 0 0
Execute 1 0.000 0.000 0 0 0 0
Fetch 85 0.020 0.000 0 8208 0 839
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Total 87 0.020 0.000 0 8208 0 839
Rows Row Source Operation
------ ------------------------------------------------
0 STATEMENT
839 FILETER (cr=8208 pr=0 pw=0 time=13410 us)
2627 PARTITION RANGE SINGLE PARTITION: 20 20 (cr=293 pr=0 pw=0 time=5296 us)
2627 TABLE ACCESS BY LOCAL INDEX ROWID 일별거래실적 PARTITION: 20 20 (cr=293 ...)
2627 INDEX RANGE SCAN 일별거래실적 X01 PARTITION: 20 20 (cr=97 pr=0 ...)
839 TABLE ACCESS BY INDEX ROWID 종목 (cr=7915 pr=0 pw=0 time=27118 us)
2623 INDEX RANGE SCAN 종목_PK (cr=5292 pr=0 pw=0 time=18069 us) (Object ID 79702)
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 회원번호
:trd_dd := '20071228'
:check_yn := 'N'
Call Count CPU Time Elapsed Time Disk Query Current Rows
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Parse 1 0.000 0.000 0 0 0 0
Execute 1 0.000 0.000 0 0 0 0
Fetch 264 0.000 0.000 0 641 0 2627
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Total 266 0.000 0.000 0 641 0 2627
Rows Row Source Operation
------ ------------------------------------------------
0 STATEMENT
2627 FILTER (cr=641 pr=0 pw=0 time=18443 us)
2627 PARTITION RANGE SINGLE PARTITION: 20 20 (cr=641 pr=0 pw=0 time=7924 us)
2627 TABLE ACCESS BY LOCAL INDEX ROWID 일별거래실적 PARTITION:20 20 (cr=641 ...)
2627 INDEX RANGE SCAN 일별거래실적_X01 PARTITION: 20 20 (cr=274 pr=0 ...)
2627 UNION-ALL (cr=0 pr=0 pw=0 time=9061 us)
2627 FILTER (cr=0 pr=0 pw=0 time=4659 us)
2627 FAST DUAL (cr=0 pr=0 pw=0 time=1874 us)
0 TABLE ACCESS BY INDEX ROWID 종목 (cr=0 pr=0 pw=0 time=0 us)
0 INDEX RANGE SCAN 종목_PK (cr=0 pr=0 pw=0 time=0 us)(Object ID 79702)
:trd_dd := '20071228'
:check_yn := 'Y'
Call Count CPU Time Elapsed Time Disk Query Current Rows
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Parse 1 0.000 0.000 0 0 0 0
Execute 1 0.000 0.000 0 0 0 0
Fetch 85 0.040 0.053 0 8208 0 839
--------- ----------- ------------ --------------- -------- -------- --------- -----------
Total 87 0.040 0.053 0 8208 0 839
Rows Row Source Operation
------ ------------------------------------------------
0 STATEMENT
839 FILTER (cr=8208 pr=0 pw=0 time=15177 us)
2627 PARTITION RANGE SINGLE PARTITION: 20 20 (cr=293 pr=0 pw=0 time=7919 us)
2627 TABLE ACCESS BY LOCAL INDEX ROWID 일별거래실적 PARTITION:20 20 (cr=293 ...)
2627 INDEX RANGE SCAN 일별거래실적_X01 PARTITION: 20 20 (cr=97 pr=0 pw=0 ...)
839 UNION-ALL (cr=0 pr=0 pw=0 time=36922 us)
0 FILTER (cr=0 pr=0 pw=0 time=1817 us)
0 FAST DUAL (cr=0 pr=0 pw=0 time=0 us)
839 TABLE ACCESS BY INDEX ROWID 종목 (cr=7915 pr=0 pw=0 time=26760 us)
2623 INDEX RANGE SCAN 종목_PK (cr=5292 pr=0 pw=0 time=17769 us)
/* 1 : 평균 2: 합계 */
if( pfmStrCmpTrim(INPUT->inData.gubun, "1", 1) == 0){
snprintf(..., " avg(계약수), avg(계약금액), avg(미결제약정금액) ");
} else {
snprintf(..., " sum(계약수), sum(계약금액), sum(미결제약정금액) ");
}
/* 1 : 평균 2: 합계 */
,decode(:gubun, '1', avg(계약수), sum(계약수))
,decode(:gubun, '1', avg(계약금액), sum(계약금액))
,decode(:gubun, '1', avg(미결재약정금액), sum(미결재약정금액))
WHERE 거래미형성률 BETWEEN :min1 AND :max1
AND 일평균거래량 BETWEEN :min2 AND :max2
AND 일평균거래대금 BETWEEN :min3 AND :max3
AND 호가스프레드비율 BETWEEN :min4 AND :max4
AND 가격연속성 BETWEEN :min5 AND :max5
AND 시장심도 BETWEEN :min6 AND :max6
AND 거래체결률 BETWEEN :min7 AND :max7
1. 도메인에 해당하는 데이터 타입과 자리수를 할당 받는다(스키마 정보를 확인하자)
거래량 | NUMBER(9)
거래대금 | NUMBER(15)
가격연속성 | NUMBER(5,2)
2. 거래량의 도메인은 9자리가 정수형 값만 허용 하고 있으며 최소 0~ 최도:999,999,999 까지 범위를 가질수 있다.
3. 사용자가 검색할 값과 숫자의 범위에 대한 선택 조건을 나열한다.
위의 그림을 보면 미만, 이하, 이상, 초과로 나오고 있다.
4. 선택조건에 해당하는 값의 범위를 지정한다.
EX> 1000주일경우
최소값 최대값
미만 : 0 ~ 999
이하 : 0 ~ 1000
이상 : 1000 ~ 999999999
초과 : 1001 ~ 999999999
2번에서 지정한 숫자 범위와 검색 조건 값에 따라 시작 범위와 종료 범위를 파악
5. 해당 선택 조건에 맞는 범위 값을 가져와 변수 값에 바인딩 처리를 한다.
- 강좌 URL : http://www.gurubee.net/lecture/3106
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.