본문 바로가기

oracle3

오라클 connect by level 사용법 서비스를 개발하다보면 시간별, 월별 그래프 등을 보여줘야할 때가 있다. 예를들어 과거 1년간의 월별 그래프를 표현한다고 치자. 12개월간의 데이터가 모두 수집되어 있으면 고민할 필요 없이 SQL을 작성하여 그래프를 표현할 것이다. 하지만 수집에 누락이 있다던지의 문제로 인해 데이터가 비어있는 경우가 있을 수 있다. 이럴때는 CONNECT BY LEVEL을 이용하여 미리 시간 데이터를 만들어 놓고 JOIN을 통하여 차트 데이터를 구현한다. 다음은 현재시간을 기준으로 월별, 일별, 년도별을 출력하는 예제이다. - 과거 1년간 월별 출력 SELECT V_MONTH FROM ( SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -LEVEL+1), 'YYYYMM') AS V_MONTH FROM DUA.. 2022. 2. 15.
오라클에서 인덱스가 없는 테이블에 인덱스 생성하기 (인덱스 생성을 빠르게) 어느날 고객으로부터 화면 조회가 느리다는 이야기를 들었다. 확인해 보니 해당 화면은 A라는 테이블을 사용 중 이었고 해당 테이블에는 인덱스가 없었다. A라는 테이블에는 약 3억건의 데이터가 있었다. 단순 SELECT조회도 느렸고 FULL PARALLEL의 힌트를 줘도 느렸다. 그래서 인덱스를 생성하게 되었는데. 두가지의 방법을 생각해 보았다. 1. 먼저 TEMP테이블을 생성 후 인덱스를 생성한 뒤 기존의 테이블의 데이터를 SELECT 후 INSERT하는 방법. 그리고 기존 테이블은 지우고 TEMP 테이블을 기존 테이블명으로 변경한다. 2. 기존 테이블에 CREATE INDEX를 이용하여 생성한다. 3억건이나 되는 테이블이니 당연히 1번이 빠를 거라고 생각하였지만 보통 귀찮은 일이 아니다. 그래서 찾아보니.. 2020. 11. 9.
오라클 random함수 사용하기 랜덤한 숫자 생성하기 SELECT DBMS_RANDOM.VALUE(0, 1000) FROM DUAL * 정수로 값이 떨어지게 하려면 ROUND함수를 이용하자. 랜덤한 문자 생성하기 SELECT DBMS_RANDOM.STRING('u', 10) FROM DUAL * 첫번째 인자. 'u', 'U' : 대문자'l', 'L' : 소문자'a', 'A' : 대소문자 구분없는 영문자'x', 'X' : 영문자와 숫자 혼합'p', 'P' : 문자 혼합두번째 인자는 자릿수 랜덤으로 정렬하기 ORDER BY DBMS_RANDOM.RANDOM() 랜덤한 날짜생성하기 TO_DATE( TRUNC ( DBMS_RANDOM.VALUE( TO_CHAR(SYSDATE - 10, 'YYYYMMDD'), TO_CHAR(SYSDATE, 'Y.. 2018. 11. 29.