본문 바로가기

sql

[Oracle] 플랜 확인방법 1. 플랜 테이블에 있는 xxx 아이디를 갖는 플랜 결과 삭제 delete from plan_table where statement_id='xxx' 2. 쿼리를 플랜 테이블에 기록 EXPLAIN plan set statement_id='xxx' into plan_table for 쿼리 3. 플랜 확인 SELECT TRIM(LEVEL)||'. '||LPAD (' ', LEVEL - 1)||operation||' '||options||' on '||object_name "Query", cost "Cost", cardinality "Rows", bytes "Bytes", decode(level,1,0,position) "Pos" FROM plan_table CONNECT BY prior id = parent_.. 더보기
[Oracle] 오라클 힌트 정리표 사용법 { SELECT | INSERT | UPDATE | DELETE } /* HINT[TEXT] [HINT[TEXT]] */ 오라클 힌트 정리표 INDEX ACCESS OPERATION 관련 HINT HINT 내용 사용법 INDEX INDEX를 순차적으로 스캔 INDEX(TABLE명, INDEX명) INDEX_DESC INDEX를 역순으로 스캔 INDEX_DESC(TABLE명, INDEX명) INDEX_FFS INDEX FAST FULL SCAN INDEX_FFS(TABLE명, INDEX명) PARALLEL_INDEX INDEX PARALLEL SCAN PARALLEL_INDEX(TABLE명,INDEX명) NOPARALLEL_INDEX INDEX PARALLEL SCAN 제한 NOPARALLEL_IN.. 더보기
다중row를 컬럼으로 변경 (ORACLE) ------------------------------- -- 1번째 방법 : XMLAGG ------------------------------- - 예제 WITH T1 AS ( SELECT 'A' AS COL1 FROM DUAL UNION ALL SELECT 'B' FROM DUAL UNION ALL SELECT 'C' FROM DUAL UNION ALL SELECT 'D' FROM DUAL UNION ALL SELECT 'D' FROM DUAL ) SELECT SUBSTR(XMLAGG(XMLELEMENT(A, ',' || COL1) ORDER BY COL1).EXTRACT('//text()'), 2) FROM T1; ----------------------------------------------.. 더보기
[ORACLE]START WITH ~ CONNECT BY PRIOR 작성하신 쿼리는 정상 수행됩니다. 1. START WITH는 처음 시작할 조건을 의미합니다. 즉, '1007' 이면서 'Y'인 로우부터 출발합니다. 2. CONNECT BY는 1.의 데이터와 연결된 로우를 반복하여 찾습니다. PRIOR 과 가까운 쪽의 컬럼(EMP_ID)이 '1007'의 컬럼이고, 반대쪽이 다른 로우의 컬럼입니다. 즉, 나의 EMP_ID ('1007')를 manager_emp_id 로 갖는 로우를 찾는 것입니다. (내 부하직원) 쉽게 생각해 Prior쪽의 컬럼이 하위이면 밑으로, 상위코드이면 위로 찾는 구조입니다. CONNECT BY와 START WITH의 순서는 의미가 없습니다. (AND가 없을 때) 다만, AND의 위치가 FROM절, CONNECT BY, START WITH 다음의 어.. 더보기