'오라클'에 해당되는 글 2건

  1. 2017.03.17 oracle sequence 생성,조회
  2. 2017.01.03 PIVOT 사용

oracle sequence 생성,조회



생성 옵션값에 대해 알아보자.

CREATE SEQUENCE 시퀀스명

START WITH n[초기화 값]

INCREMENT BY n[증가값]

MAXVALUE n[최대값]  또는 NOMAXVALUE  [무한대값]

MINVALUE n [최소값]  또는 NOMINVALUE [무한대값]



그럼 생성해보자

시퀀스명 = test_seq 

초기값 = 1

증가값 = 1

최대값 = 500


create sequence test_seq 

start with 1 

increment BY 1

maxvalue 10000


생성된 test_seq 사용하는 방법

insert into test (id_seq, name )

values(test_seq.nextval, 'HI' );


insert문 실행후 최종(현재) 시퀀스값 조회

select 시퀀스명.currval from dual;


insert문 실행 없이 최종 시퀀스값 조회

select * from user_sequences

where sequence_name=upper('시퀀스명')


결과 데이터에서 last_number 가 현재 시퀀스값을 의미함.

시퀀스 초기화 할시 현재 시퀀스를 삭제후 다시 생성해야함.





'DB > ORACLE' 카테고리의 다른 글

ROLLUP - 소계,합계 구하기  (0) 2017.05.19
oracle index  (0) 2017.01.19
PIVOT 사용  (0) 2017.01.03
ALTER TABLE  (0) 2016.11.28
Posted by 양승아
:

PIVOT 사용

DB/ORACLE 2017. 1. 3. 22:33 |

ORACLE PIVOT

 

PIVOT 기능은 11g부터 사용가능하다.

이하버전은 DECODE 이용하여 ROW 을 컬럼으로 변경하는 작업을 했다.

PIVOT 를 이용하면 DECODE 의 복잡하고 비직관적인 코드를 좀더 직관적으로 작성할 수 있다.


주의할점 !

PIVOT 사용시 해당하는 컬럼을 미리 정의해야된다.

상황에 따라 DECODE , PIVOT 사용한다.



예제 !

가상테이블 이용해 2017년 DATE 구하여 PIVOT,DECODE을 각각 사용하여 요일갯수 SUM 해봄.  


* 가상테이블

WITH TEMP_TABLE AS (

SELECT (TO_DATE('20140101','YYYYMMDD') + LEVEL-1) DTE

      FROM DUAL

      CONNECT BY LEVEL-1 <= TO_DATE('20171231','YYYYMMDD') - TO_DATE('20170101','YYYYMMDD')

)

 


* PIVOT

SELECT *

FROM (

  SELECT to_char(DTE,'MM') || '월' MON

              , decode(to_char(DTE,'D'),'1','일','2','월','3','화','4','수','5','목','6','금','7','토') WEEK

              , DTE

  FROM TEMP_TABLE

)

PIVOT

(

COUNT(DTE)

FOR WEEK IN ('일','월','화','수','목','금','토')

)

ORDER BY MON;


* DECODE

SELECT to_char(DTE,'MM') || '월' MON

  , sum(decode(to_char(DTE,'D'),'1',1,0)) "일"

  , sum(decode(to_char(DTE,'D'),'2',1,0)) "월"

  , sum(decode(to_char(DTE,'D'),'3',1,0)) "화"

  , sum(decode(to_char(DTE,'D'),'4',1,0)) "수"

  , sum(decode(to_char(DTE,'D'),'5',1,0)) "목"

  , sum(decode(to_char(DTE,'D'),'6',1,0)) "금"

  , sum(decode(to_char(DTE,'D'),'7',1,0)) "토"

FROM TEMP_TABLE

GROUP BY to_char(DTE,'MM')

ORDER BY MON;




* 결과값 !

MON 일    월     화     수      목     금      토

01월 4 4 4 5 5 5 4

02월 4 4 4 4 4 4 4

03월 5 5 4 4 4 4 5

04월 4 4 5 5 4 4 4

05월 4 4 4 4 5 5 5

06월 5 5 4 4 4 4 4

07월 4 4 5 5 5 4 4

08월 5 4 4 4 4 5 5

09월 4 5 5 4 4 4 4

10월 4 4 4 5 5 5 4

11월 5 4 4 4 4 4 5

12월 4 5 5 5 4 4 4

'DB > ORACLE' 카테고리의 다른 글

ROLLUP - 소계,합계 구하기  (0) 2017.05.19
oracle sequence 생성,조회  (0) 2017.03.17
oracle index  (0) 2017.01.19
ALTER TABLE  (0) 2016.11.28
Posted by 양승아
: