분류 전체보기
-
[ORACLE] TIMESTAMP 활용 (데이터복구)DATABASE 2018. 11. 29. 11:32
10초 전의 상태를 조회SELECT *FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' SECOND)WHERE[컬럼명] = [ ] -- 키값 10분 전의 상태를 조회SELECT *FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE)WHERE[컬럼명] = [ ] 1시간 전의 상태를 조회SELECT *FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' HOUR)WHERE[컬럼명] = [ ] 1일 전의 상태를 조회SELECT *FROM[테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY)WHERE[컬럼명]..
-
[ORACLE] LISTAGG함수DATABASE 2018. 11. 6. 15:26
LISTAGG( 컬럼A, 구분자 ) WITHIN GROUP ( ORDER BY 컬럼B): 컬럼A의 값들을 [구분자]와 같이 컬럼B의 기준으로 정렬하여 한 행으로 보여주는 함수로 예시select * from APPARTwhere apgrade='907' 1. 각 원별로 학과 보여주기 select apdiv, listagg( apdept, ' ; ' ) within group (order by apno )from APPARTwhere apgrade='907'group by apdiv select apdiv, listagg( apdept, ' ; ' ) within group (order by apno desc ) --- apno의 내림차순으로from APPARTwhere apgrade='907'group b..
-
[ORACLE] MERGE문DATABASE 2018. 11. 6. 09:55
MERGE INTO 구문- 조건에 따라서 데이터의 삽입, 갱신, 삭제 작업을 한번에 할 수 있다.- 해당 행이 존재하는 경우 UPDATE / 새로운 행일경우 INSERT 수행한다.- 대상 테이블에 대한 UPDATE/INSERT 조건은 ON절에 의해 결정된다.- MERGE문에서 CLOB 사용시 업데이트할 내용이 2000bytes가 넘을때 ORA-00600오류가 발생하며, patch set 11.2.0.2 버전으로 해결가능 문법 MERGE INTO 테이블 A --- UPDATE / INSERT할 테이블USEING 대상테이블/뷰 B --- 비교대상 테이블 ( 동일 테이블이면 using dual 사용)ON (조건) --- A 와 B의 조인식WHEN MATCHED THEN --- ON 조건절에 맞는 ROW(행)이..
-
[ORACLE] ROW_NUMBER() OVER( )DATABASE 2018. 11. 5. 16:22
ROW_NUMBER() OVER( PATITION BY 중복조회컬럼 ORDER BY 정렬컬럼명): 특정 컬럼 기준으로 순위정하기(행번호 부여하기) ex) 교수별로 가장 오래된 날짜에 해당되는 데이터 출력 1. 교수별로 가장 오래된 날짜순으로 정렬하기 SELECTrow_number( ) over ( partition by empno order by from_dt ) rowno ,A.*FROM PER130TL A 2. 교수별로 가장 오래된 날짜(1건)에 해당하는 데이터 출력 SELECT *FROM ( SELECTrow_number( ) over ( partition by empno order by from_dt ) rowno,A.* FROM PER130TL A )WHERE rowno = 1 ex) 사번(RS..
-
[ORACLE] CONNECT BY LEVEL 활용 <달력>DATABASE 2018. 11. 5. 13:16
현재 달의 달력 표현 SELECT max(decode(to_char(sday+cnt-1,'d'),1,A.cnt)) 일,max(decode(to_char(sday+cnt-1,'d'),2,A.cnt)) 월,max(decode(to_char(sday+cnt-1,'d'),3,A.cnt)) 화,max(decode(to_char(sday+cnt-1,'d'),4,A.cnt)) 수,max(decode(to_char(sday+cnt-1,'d'),5,A.cnt)) 목,max(decode(to_char(sday+cnt-1,'d'),6,A.cnt)) 금,max(decode(to_char(sday+cnt-1,'d'),7,A.cnt)) 토FROM (select level cnt, trunc(to_date(SYSDATE),'mm'..
-
[ORACLE] CONNECT BY LEVEL 개념DATABASE 2018. 11. 5. 11:31
CONNECT BY LEVEL: 계층형 쿼리에서 자주 볼수 있는 CONNECT BY 절에서 , LEVEL을 사용하면, 원하는 만큼의 행을 리턴 - 1부터 10까지 10행을 표현하기 select level col from dualconnect by level < 11 ; ▶ 구구단 예제 select A||'*'||B||'='||A*Bfrom (select level+1 A from dual connect by level 구구단의 시작은 2단부터이므로 +1(select level B from dual connect by level A X B (B는 1~9까지이므로)
-
[ORACLE] DECODE 와 CASEDATABASE 2018. 11. 5. 10:43
DECODE ( 값, IF1, THEN1, IF2, THEN2 ...): 값이 IF1일 경우 THEN1 값을 반환하고, 값이 IF2일 경우 THNE2 값을 반환한다. DECODE함수 안에 DECODE 함수 중첩으로 사용가능 select GRADE, DECODE(GRADE, 908, '2017년', 907, '2016년', 906, '2015년', 907, '2014년') YEARfrom IV_APMANwhere GRADE >= 905group by GRADE; CASE- CASE 변수 when 조건값 then 결과값 ... END select GRADE, CASE GRADE when 908 then '2017년' when 907 then '2016년' when 906 then '2015년' when 90..
-
[ORACLE] 함수 모음DATABASE 2018. 11. 5. 09:46
SIGN ( x ) : x의 값이 0보다 작으면 -1 0이면 0 0보다 크면 1 CEIL ( x ) : 올림함수로 x보다 크거나 같은 제일 작은 정수 ex) ceil (6.5) = 7 FLOOR ( x ): 버림함수로 x보다 작거나 같은 제일 큰 정수 ex) floor (6.5) = 6 IFNULL (값1 , 값2): 값1이 NULL이면 값2로 대치하고 그렇지 않으면 값1 출력 NOT IN IN : NULL값 포함: NULL값이 포함되지 않는다 LPAD ( 변수, 길이, 변형자) RPAD( ): 변수의 좌측(왼쪽)으로 [변형자]를 [길이]만큼 채운다 ex) SELECT LPAD( 'KOREA', 8, '*') FROM DUAL;