Oracle 자동 증분
테이블의 기본 키를 자동으로 증가시키기 위해 시퀀스와 트리거를 만들어야 하는데 어떻게 하는지 모르겠습니다.
테이블과 시퀀스를 만듭니다.
SQL> create table staff (
2 emp_id number primary key,
3 staff_name varchar2(100)
4 );
Table created.
SQL> create sequence emp_id_seq;
Sequence created.
이제 시퀀스를 사용하여 기본 키를 채우는 트리거를 만들 수 있습니다.
SQL> create trigger trg_emp_id
2 before insert on staff
3 for each row
4 begin
5 select emp_id_seq.nextval
6 into :new.emp_id
7 from dual;
8 end;
9 /
Trigger created.
이제 데이터를 삽입할 때 다음을 지정할 필요가 없습니다.EMP_ID열 - 트리거에 의해 자동으로 채워집니다.
SQL> insert into staff( staff_name ) values ('Justin');
1 row created.
SQL> select * from staff;
EMP_ID STAFF_NAME
---------- --------------------
1 Justin
이 글을 읽어보렴, 아름다운 기사야.
방법 시퀀스 [오라클의 자동 증분]
통사론
Create sequence sequence_name
start with value
increment by value
minvalue value
maxvalue value;
예
SQL> create table emp (
emp_id number(10),
fname varchar2(25),
lname varchar2(25),
constraint pk_emp_id PRIMARY KEY(emp_id)
);
SQL> Create sequence emp_sequence
start with 1
increment by 1
minvalue 1
maxvalue 10000;
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Darvin','Johnson');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Mig','Andrews');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Alex','Martin');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Jon','paul');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Yatin','Bones');
에emp_sequence.nextval어디에emp_sequence위에서 만든 시퀀스의 이름입니다.nextval다음을 할당하는 데 사용되는 함수입니다.next number from emp_sequence to emp_id빈 테이블의 열입니다.
SQL> select * from emp;
EMP_ID FNAME LNAME
---------- ------------------------- -------------------------
1 Darvin Johnson
2 Mig Andrews
3 Alex Martin
4 Jon paul
5 Yatin Bones
사용해 보십시오.
create sequence seq_EmpID start with 1 increment by 1
insert into Emp_Table values(seq_EmpID.nextval,'Ram')
사용 중인 Oracle 버전이 무엇인지 잘 모르겠지만 19c에서 다음과 같이 작동할 것입니다.
create table staff (
emp_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
staff_name varchar2(100)
);
위의 명령은 키 값을 채우는 데 자동으로 사용되는 시스템 시퀀스를 만듭니다.생성된 시퀀스는 시스템 시퀀스이므로 삭제할 수 없지만 테이블이 삭제되고 휴지통이 제거될 때 열에 종속되기 때문에 삭제할 수 있습니다.
아주 좋은 질문입니다!!아마도 시퀀스는 이러한 방식으로 사용될 수 있습니다. 또한 실제로 차이가 있는지도 잘 모르겠습니다.
CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
테이블을 처음 만드는 중:
sql-> create table item(id int primary key, name varchar(25),qty int, price int);
이제 첫 번째 열에 자동 증분 시퀀스를 만들고자 합니다. id
sql-> CREATE SEQUENCE id MINVALUE 1 START WITH 1 CACHE 10; //system saves the last 10 items in temp memory
자동 증분이 생성됩니다.
이제 데이터를 삽입합니다.
sql-> insert into item VALUES(id.nextval,'ddcd',2,4);
sql-> insert into item VALUES(id.nextval,'ddcd',676,4);
마지막으로 테이블 표시:
SQL> select * from item;
ID NAME QTY PRICE
1 ddcd 2 4
2 ddcd 676 4
시퀀스 값이 일치하지 않기 때문에 시퀀스를 여러 테이블에 사용하는 경우: 두 개의 테이블이 emp 및 department: 만약 내가 emp에 시퀀스를 사용한다면, ID_dept = 6은 다른 테이블에서 이미 사용되고 있기 때문입니다.
예:
SQL> insert into emp values(masequence.nextval,'aaa');
1 줄 바꿈 CRUUE.
SQL> insert into departement values(masequence.nextval,'aaa');
1 줄 바꿈 CRUUE.
SQL> select * from emp;
ID_EMP NOM_EMP
---------- -------------------------
5 aaa
SQL> select * from departement;
ID_DEPT NOM_DEPT
---------- ----------
6 aaa
SQL>
언급URL : https://stackoverflow.com/questions/9733085/auto-increment-for-oracle
'codememo' 카테고리의 다른 글
| xlrd로 Excel 파일 읽기 (0) | 2023.07.02 |
|---|---|
| 키클록 - 영역 간에 공통 사용자 집합을 공유할 수 있습니까? (0) | 2023.07.02 |
| 마리아의 재귀적 부모 자식 문제DB (0) | 2023.07.02 |
| 변수 인수 목록을 사용하는 디버그 전용 함수는 어떻게 생성합니까?printf()와 같이() (0) | 2023.07.02 |
| SQL Server의 조건을 기준으로 카운트 (0) | 2023.07.02 |