> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/database/oracle/structure-query-language/user-query/manage-sequence.md).

# 시퀀스 관리

## 시퀀스(Sequence)

시퀀스는 번호를 생성하는 도구이다. 일반적인 테이블의 경우 데이터를 식별하기 위해 고유한 번호를 부여하는데, 이 때 편의를 위해 시퀀스를 사용할 수 있다.

### 시퀀스 생성

시퀀스의 생성 방법은 다음과 같다

```sql
create sequence 이름 [옵션];
```

옵션을 부여하지 않을 경우 기본 옵션이 적용되며, 기본 값은 다음과 같다

| 옵션          | 기본값       | 설정 방법                    | 설명                         |
| ----------- | --------- | ------------------------ | -------------------------- |
| min value   | 1         | minvalue 값               | 시퀀스가 가질 수 있는 최소값           |
| max value   | 1.000E+28 | maxvalue 값 또는 nomaxvalue | 시퀀스가 가질 수 있는 최대값           |
| increment   | 1         | increment by 값           | 시퀀스의 증가치                   |
| start value | 1         | start with 값             | 시퀀스의 초기 시작값                |
| cycle       | N         | cycle 또는 nocycle         | 시퀀스의 순환 여부                 |
| order       | N         | order 또는 noorder         | 병렬 서버 운용시 요청 순서대로 번호 설정 여부 |
| cache       | 20        | cache 값 또는 nocache       | 시퀀스의 캐시 크기                 |

### 시퀀스 사용

시퀀스를 이용하여 번호를 발급하거나 현재 번호를 확인할 수 있다.

{% tabs %}
{% tab title="SQL" %}

```sql
시퀀스이름.nextval
```

시퀀스의 다음 번호를 가져온다. 이 값은 변경할 수 없다.
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="SQL" %}

```sql
시퀀스이름.currval
```

시퀀스의 현재 번호를 가져온다. nextval을 사용한 적이 있는 경우 가져올 수 있다.
{% endtab %}
{% endtabs %}

### 시퀀스 조회

생성한 시퀀스를 조회하는 방법은 다음과 같다

```sql
select * from user_sequences;
```

항목 이름을 적어 항목 별로 조회하는 것도 가능하며, 이름을 통해 원하는 항목만 검색할 수도 있다.

```sql
select * from user_sequence where SEQUENCE_NAME = '이름';
```

### 시퀀스 수정

생성한 시퀀스를 수정할 경우 다음과 같이 작성다.

```sql
alter sequence 이름 [옵션];
```

단, 옵션 중에서 start with 항목은 수정할 수 없다.

### 시퀀스 삭제

생성한 시퀀스를 삭제하는 명령은 다음과 같다.

```sql
drop sequence 이름;
```

### 시퀀스 생성 예시

**10001부터 50000까지 1씩 번호를 부여하는 시퀀스 생성**

```sql
CREATE SEQUENCE 이름 
START WITH 10001
INCREMENT BY 1
MAXVALUE 50000
```

**캐시를 사용하지 않는 시퀀스 생성**

```sql
CREATE SEQUENCE 이름 nocache;
```

캐시를 부여하고 싶다면 `CACHE 10`과 같이 사용이 가능하며, 기본 값은 20이다.

**순환 기능을 사용하는 5자리 이내의 번호를 부여하는 시퀀스 생성**

```sql
CREATE SEQUENCE 이름 MAXVALUE 99999 CYCLE;
```

`MINVALUE 1` , `START WITH 1`, `INCREMENT BY 1` 등은 생략이 가능하다.
