3.4 모드 대상

3739 단어 Oacle.netcacheBlog
원문의 제목: 
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, 위의 코드 는 자동 으로 증가 하 는 기능 을 실현 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기