본문 바로가기

SQL/sqlplus

ORACLE(SEQUENCE)

 

CREATE SEQUENCE SEQ_TOPIC;

SEQUECE가 성공적으로 만들어진 화면

SEQUENC를 이용해서 자동으로 1씩 증가시키는 Primary Key 값을 만들 수 있다.

 


INSERT INTO topic
(id,title,description,created)
VALUES
(4,'MongoDB','MongoDB is...',SYSDATE);

SEQUENCE를 이용하지 않으면 id의 값을 넣어줘야하지만 SEQUENCE를 활용하면 다음과 같이 바꿔쓰면 된다.

 

INSERT INTO topic
(id,title,description,created)
VALUES
(SEQ_TOPIC.NEXTVAL,'MongoDB','MongoDB is...',SYSDATE);

VAL은 VALUE

 

자 그렇다면 한번 이미지를 그려보자!

 

SEQ_TOPIC이라고 하는 SEQUENCE 장치 안에 현재  0이라는 숫자가 있는 상태라면

.NEXTVAL이라고 하는 저 명령을 내리면 SEQUENCE라고 하는 기계는 

자기가 갖고 있던 0이라는 숫자를 1을 증가시키고

그 값을 우리한테 줘서 1을 증가시켜 보여주게 된다.


자 그러면 기존에 있는 topic의 값과

 

SEQUENCE 값과 충동할 수 있으니 지우고

 

SEQUENCE를 이용해보자!

 

 

 

[값을 지울 때 /실습을 위해서 전체 삭제하게 했지만 실제로는 절대절대 금지!!]

DELETE FROM topic;

다시 한번 강조하지만 DELETE문은 항상 주의!! 

SEQUENCE 이용

 

숫자를 넣지 않아도 SEQUENCE를 이용하면 id 값이 1인 행을 자동으로 추가시켜주는 것을 확인할 수 있다.

추가적으로 넣었을 때 화면(id의 값이 2가 된 것을 확인할 수 있다.) 
추가한 후 결과


 

Q. 그렇다면 우리가 현재 가지고 있는 SEQUENCE의 현재 값이 뭔지 알고 싶을 때는 어떻게 해야 할까?

 

SELECT SEQ_TOPIC.CURRVAL FROM topic;

4개의 SEQUENCE의 값이 4라는 것을 알 수 있다.

 

위에 처럼 topic을 입력하게되면

topic 테이블에 있는 행의 갯수만큼 똑같은 값들이 출력되게 된다.

 

그래서 이럴때는

DUAL이라고 하는 일종의 가상의 느낌이 나는

가짜 표와 같은 특수한 테이블이 있다.

그럴 때 DUAL이란 것을 쓰면 값을 하나만 뱉어준다. 

SELECT SEQ_TOPIC.CURRVAL FROM DUAL;

DUAL 명령 후 출력

  

 

SEQUENCE는 항상 PRIMARY KEY는 패밀리라고 생각하자.

 

이 두가지는 서로 같이 있을 때 강력해진다.

'SQL > sqlplus' 카테고리의 다른 글

ORACLE(PRIMARY KEY)  (0) 2021.04.02
ORACLE(행 삭제)  (0) 2021.04.02
ORACLE(행 수정)  (0) 2021.04.02
ORACLE(행 읽기 - 정렬과 페이징)  (0) 2021.04.02
ORACLE(행 읽기 - 행과 컬럼 제한하기)  (0) 2021.04.02