Các lập trình viên thường dùng trường Auto Number để đánh số tự động trong một trường dữ liệu xác định. Đối với cơ sở dữ liệu Oracle các phiên bản trước 12c, cần sử dụng primary key column với sequence để làm việc này.

Giả sử có 1 bảng departments (phòng ban)
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;

Bây giờ ta sẽ sử dụng dept_seq phục vụ cho việc đánh số tự động trường ID bằng cách tạo một TRIGGER
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;

Với oracle 11g thì có thể sử dụng:
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
:new.id := dept_seq.NEXTVAL;
END;

Hãy test xem kết quả:
INSERT INTO departments (description) VALUES ('Development');
SELECT * FROM departments;
INSERT INTO departments (id, description) VALUES (dept_seq.NEXTVAL, 'Accounting');
SELECT * FROM departments;

Advertisements