3.4 모드 대상
Oracle 자체 증가 필드 만 드 는 방법 - ORACLE SEQUENCE 의 간단 한 소개 (전환)
먼저 이런 표 가 설치 되 어 있다.
create table S_Depart (
DepartId INT not null,
DepartName NVARCHAR2(40) not null,
DepartOrder INT default 0,
constraint PK_S_DEPART primary key (DepartId)
);
Oacle 에서 sequence 는 이른바 시리 얼 번호 입 니 다. 가 질 때마다 자동 으로 증가 합 니 다. 보통 시리 얼 번호 에 따라 정렬 해 야 하 는 곳 에 사 용 됩 니 다.
1、Create Sequence
먼저 CREATE SEQUENCE 나 CREATE ANY SEQUENCE 권한 이 있어 야 합 니 다.
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 매번 몇 개 씩 추가
START WITH 1 -- 1 부터 계산
NOMAXvalue -- 최대 값 을 설정 하지 않 음
NOCYCLE -- 계속 누적 되 고 순환 되 지 않 습 니 다.
CACHE 10; --캐 시 cache 시퀀스 를 설정 합 니 다. 시스템 다운 이 떨 어 지 거나 다른 경우 시퀀스 가 연속 되 지 않 을 수도 있 습 니 다. - - - - NOCACHE 로 설정 할 수도 있 습 니 다.
S 에 대하 여Depart 가 만 든 sequence 는 다음 과 같 습 니 다.
create sequence S_S_DEPART
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;
empsequence, CURVAL, NEXTVAL 을 사용 할 수 있 습 니 다.
CURRVAL = sequence 의 현재 값 을 되 돌려 줍 니 다.
NEXTVAL = sequence 값 을 추가 하고 sequence 값 을 되 돌려 줍 니 다.
예 를 들 면:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
sequence 를 사용 할 수 있 는 곳:
- 하위 조회, snapshot, VIEW 를 포함 하지 않 는 SELECT 문구
- INSERT 문장의 하위 조회 중
- NSERT 문장의 valueS 중
- UPDATE 의 SET 중
다음 과 같은 예 를 볼 수 있다.
insert into S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,'12345',1);
SELECT empseq.currval FROM DUAL;
하지만 주의해 야 할 것 은:
- 첫 번 째 NEXTVAL 은 초기 값 을 되 돌려 줍 니 다.다음 NEXTVAL 은 사용자 가 정의 한 INCREMENT BY 값 을 자동 으로 증가 시 킨 다음 증가 한 값 을 되 돌려 줍 니 다.CURVAL 은 항상 현재 SEQUENCE 의 값 을 되 돌려 주지 만, 첫 번 째 NEXTVAL 이 초기 화 된 후에 야 CURVAL 을 사용 할 수 있 습 니 다. 그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.한 번 에 NEXTVAL 은 SEQUENCE 의 값 을 한 번 증가 시 킬 수 있 기 때문에 같은 문장 에 여러 개의 NEXTVAL 을 사용한다 면 그 값 은 다르다.알다
- CACHE 값 을 지정 하면 ORACLE 는 메모리 에 sequence 를 미리 설치 하여 빨리 액세스 할 수 있 습 니 다.cache 에서 꺼 낸 후, Oacle 은 자동 으로 cache 로 한 그룹 을 더 가 져 옵 니 다.cache 를 사용 하면 데이터 베 이 스 를 갑자기 비정상적 으로 다운 (shutdown abort) 하면 cache 의 sequence 를 잃 어 버 릴 수 있 습 니 다. 따라서 create sequence 를 사용 할 때 nocache 로 이 를 방지 할 수 있 습 니 다.
2、Alter Sequence
이 sequence 의 owner 나 ALTER ANY SEQUENCE 권한 이 있어 야 sequence 를 변경 할 수 있 습 니 다. start 를 제외 한 모든 sequence 인 자 를 alter 할 수 있 습 니 다. start 값 을 바 꾸 려 면 drop sequence 를 다시 re - create 해 야 합 니 다.
Alter sequence 의 예
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXvalue 10000
CYCLE -- 10000 까지 처음부터
NOCACHE ;
Sequence 초기 화 매개 변수 에 영향 을 줍 니 다:
SEQUENCE CACHE ENTRIES = cache 와 동시에 사용 할 sequence 수 를 설정 합 니 다.
간단하게 드 롭 시 퀀 스 할 수 있어 요.
DROP SEQUENCE order_seq;
간단 한 예:
create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;
개발 자 코드:
create or replace trigger tri_test_id
before insert on S_Depart --S_Depart
for each row
declare
nextid number;
begin
IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId
select SEQ_ID.nextval --SEQ_ID
into nextid
from sys.dual;
:new.DepartId:=nextid;
end if;
end tri_test_id;
OK, 위의 코드 는 자동 으로 증가 하 는 기능 을 실현 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 작업 은 Clob 또는 NClob 데이터 형식의 저장 프로 세 스 인 스 턴 스 를 포함 합 니 다.텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.