SELECT 'A' d, 1 a, 2 b, 3 c FROM dual UNION ALL SELECT 'B' d, 4 a, 5 b, 6 c FROM dual UNION ALL SELECT 'B' d, 7 a, 8 b, 9 c FROM dual UNION ALL SELECT 'C' d, 0 a, 1 b, 2 c FROM dual UNION ALL SELECT 'C' d, … 계속 읽기 ROW_NUMBER() OVER(PARTITION BY 칼럼1 ORDER BY 칼럼1)
[일:] 2019 11월 18
WM_CONCAT보다 속도가 좋은 LISTAGG
참고사이트 : http://krespo.net/195 11g에서 가능 간단한 예 SELECT DEPTNO , LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY NAME) AS NAME FROM TEST_DB WHERE DEPTNO = 1 GROUP BY DEPTNO; 데이터가 적을때는 문제 없었지만, 데이터가 많아지니 WM_CONCAT에서 속도를 다 잡아 먹고 있었다. 아래처럼 LISTAGG로 바꾸니 속도가 많이 빨라졌다. SELECT B.HICODE, B.HINAME, A.MCODE, A.MNAME, A.BUSINESSNUMBER, A.PURCHASETYPE , LISTAGG(DECODE(C.DDCFLAG,'I',C.ACQUIER,''),',') WITHIN GROUP … 계속 읽기 WM_CONCAT보다 속도가 좋은 LISTAGG
주로 쓰는 힌트
아래와 같은 힌트들이 주로 사용된다. /*+ INDEX(A MAN_PK) */ /*+ ORDERED USE_NL(A, B, C, D, F) INDEX(B MAN_IX1) */ /*+ FULL(A) PARALLEL(A,4)*/ /*+ LEADING(A B) INDEX(A MAN_PK) INDEX(B CAR_PK) */ A B테이블을 우선으로 선회하고 인덱스를 태운다.
오라클 초성검색 함수
function fn_korinitialkeyword( str in varchar2) return varchar2 is returnStr varchar2(100); cnt number := 0; tmpStr varchar2(10); begin if str is null then return ''; end if; cnt := length(str); for i in 1 .. cnt loop tmpStr := substr(str,i,1); returnStr := returnStr || case when tmpStr < 'ㄱ' then substr(tmpStr, 1, 1) when ascii('ㄱ') <= … 계속 읽기 오라클 초성검색 함수
connect by level
select levelfrom dualconnect by level <= 7; 결과값 1234567