Không có cái gọi là cột "auto_increment" hoặc "danh tính" trong Oracle kể từ Oracle 11g . Tuy nhiên, bạn có thể mô hình hóa nó một cách dễ dàng bằng một chuỗi và một trình kích hoạt:
Định nghĩa bảng:
CREATE TABLE departments (
ID NUMBER(10) NOT NULL,
DESCRIPTION VARCHAR2(50) NOT NULL);
ALTER TABLE departments ADD (
CONSTRAINT dept_pk PRIMARY KEY (ID));
CREATE SEQUENCE dept_seq START WITH 1;
Định nghĩa trình kích hoạt:
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
CẬP NHẬT:
IDENTITY
cột hiện đã có trên Oracle 12c:
create table t1 (
c1 NUMBER GENERATED by default on null as IDENTITY,
c2 VARCHAR2(10)
);
hoặc chỉ định giá trị bắt đầu và giá trị gia tăng, đồng thời ngăn chặn bất kỳ sự chèn nào vào cột nhận dạng (GENERATED ALWAYS
) (một lần nữa, chỉ Oracle 12c +)
create table t1 (
c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
c2 VARCHAR2(10)
);
Ngoài ra, Oracle 12 cũng cho phép sử dụng một chuỗi làm giá trị mặc định:
CREATE SEQUENCE dept_seq START WITH 1;
CREATE TABLE departments (
ID NUMBER(10) DEFAULT dept_seq.nextval NOT NULL,
DESCRIPTION VARCHAR2(50) NOT NULL);
ALTER TABLE departments ADD (
CONSTRAINT dept_pk PRIMARY KEY (ID));