WM_CONCAT 함수를 이용하여 손쉽게 여러행의 데이터를 한 컬럼으로 합칠 수 있다.□ 방법 1. (WM_CONCAT 이용) --가상 테이블 WITH TEST_TABLE AS ( SELECT '고구려' COUNTRY, '1대' ST, '동명성왕' KING_NM FROM DUAL UNION ALL SELECT '고구려' COUNTRY, '3대' ST, '대무신왕' KING_NM FROM DUAL UNION ALL SELECT '백제' COUNTRY, '1대' ST, '온조왕' KING_NM FROM DUAL UNION ALL SELECT '고구려' COUNTRY, '2대' ST, '유리왕' KING_NM FROM DUAL UNION ALL SELECT '백제' COUNTRY, '3대' ST, '기루왕' ..
데이터를 실수로 삭제(DELETE) 또는 수정(UPDATE)을 하고 COMMIT을 했다면 당황하지 말고 TIMESTAMP를 사용하여 이전의 데이터를 조회하여 복구할 수 있다. 오라클 9i Release 2부터 Flashback이라는 기능이 생겼는데, 일종의 휴지통이라고 생각하면 된다. Flashback의 사이즈만큼만 과거 데이터를 보관하고 있으니, 변경이 자주 발생하는 테이블은 복구 가능한 시점이 짧을 수 있다. SELECT * FROM test_table AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE) WHERE id = '1234' 위의 쿼리를 조회하면 10분 이전의 데이터가 조회된다. 단위는 SECOND, MINUTE, HOUR, DAY로 바꿔 쓸 수 ..
직원명을 초성으로 검색할수 있도록 요청이 들어와서 급하게 만들었다. 직원수가 아주많은곳에서는 where절에 사용하면 안됨... 예) fn_korinitialkeyword('홍길동') return : ㅎㄱㄷ select * from 테이블 where fn_korinitialkeyword(직원명컬럼) like '%ㅎㄱㄷ%' 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 ..
오라클에서 쿼리문을 작성하다 보면 테이블에 저장되지 않는 날짜까지 포함해서 조회해야 할 경우가 있다. 이럴 때는 시작일자와 종료일자를 설정하여 날짜 뷰를 생성하여 아우터 조인을 하면 쉽게 해결이 된다. 날짜 뷰 만들기 SELECT TO_DATE('20211201','YYYYMMDD') + LEVEL - 1 AS dates FROM dual CONNECT BY LEVEL
오라클 쿼리에서 칼럼에 구분자로 입력된 값을 행으로 분리(Split)하여 조회해야 할 상황이 종종 발생한다. 대부분 값을 조회하여 프로그래밍 코드에서 구분자를 분리하는 작업을 한다. 그러나 쿼리에서 미리 행으로 분리해야 하는 경우도 발생하므로 아래의 예제를 참고하면 된다. 부하가 많이 발생할 수 있으므로 데이터가 많은 경우는 권장하지 않는다. 예제 1 - Oracle 10g 이상 (정규식 함수 사용) SELECT REGEXP_SUBSTR(a.langList, '[^|]+', 1, LEVEL) AS split_result FROM (SELECT 'Java|Kotlin|Python|Swift' AS langList FROM dual) aCONNECT BY LEVEL 위의 예제는 구..
오늘이 속한 주의 월요일부터 일요일까지 일자가 필요할때가 있다 select to_char(a.s_date, 'yyyy-mm-dd') monday , to_char(a.s_date+1, 'yyyy-mm-dd') tuesday , to_char(a.s_date+2, 'yyyy-mm-dd') wednesday , to_char(a.s_date+3, 'yyyy-mm-dd') thursday , to_char(a.s_date+4, 'yyyy-mm-dd') friday , to_char(a.s_date+5, 'yyyy-mm-dd') saturday , to_char(a.s_date+6, 'yyyy-mm-dd') sunday from ( select sysdate - (to_number(to_char(sysdate,..