06/04/2021, 14:51

ìm hiểu Sequence trong Oracle - Oracle nâng cao

Trong bài này chúng ta sẽ tìm hiểu một đối tượng thường được dùng để tạo ra các số tăng dần hoặc giảm dần trong Oracle, đó là Sequence. Mỗi một Sequence được tạo ra sẽ được lưu trữ trên hệ thống cho đến khi bạn thực hiện một thao tác xóa. 1. Sequence trong Oracle là gì? Sequence là đối ...

Trong bài này chúng ta sẽ tìm hiểu một đối tượng thường được dùng để tạo ra các số tăng dần hoặc giảm dần trong Oracle, đó là Sequence. Mỗi một Sequence được tạo ra sẽ được lưu trữ trên hệ thống cho đến khi bạn thực hiện một thao tác xóa.

1. Sequence trong Oracle là gì?

Sequence là đối tượng đặc biệt trong Oracle, nó có nhiều thuộc tính giúp quản lý và tạo ra các số tăng dần hoặc giảm dần, được lưu trữ vĩnh viễn và global trong database, trừ khi bạn xóa nó.

Cấu trúc của Sequence như sau:

CREATE SEQUENCE emp_sequence
      INCREMENT BY 1
      START WITH 1
      MAXVALUE 30
      NOCYCLE;

Trong đó:

  • INCREMENT BY 1: Là bước nhảy mỗi lần là 1 đơn vị, bạn có thể đổi thành 2 hay 3 đơn vị tùy thích.
  • START WITH 1: Là giá trị ban đầu, bạn có thể đổi 1 thành một số bất kì
  • MAXVALUE 30: Là giá trị tối đa, nếu bạn muốn không giới hạn thì đổi thành NOMAXVALUE.
  • NOCYCLE: Cấu hình không thể tạo ra thêm giá trị sau khi đạt tới mức tối đa hoặc tối thiểu. Nếu bạn muốn vẫn tạo thì đổi thành CYCLE.

Ngoài ra vẫn còn rất nhiều tham số khác và bạn có thể tham khảo tại đây.

2. Tạo sequence trong Oracle

Giả sử mình chạy câu lệnh sau để tạo sequence.

CREATE SEQUENCE my_sequence
  INCREMENT BY 10
  MINVALUE 10
  MAXVALUE 30
  CYCLE;

Ý nghĩa của nó như sau: Tạo ra sequence có tên là my_sequence, bước nhảy là 10, giá trị bắt đầu là 10, giá trị tối đa là 30, có thể lặp lại từ đầu nếu vượt quá giá trị tối đa.

Ta thử thực hành một vài lệnh xem có đúng không nhé.

SELECT my_sequence.NEXTVAL FROM dual;
# Kết quả: 10

SELECT my_sequence.NEXTVAL FROM dual;
# Kết quả: 20

SELECT my_sequence.NEXTVAL FROM dual;
# Kết quả: 30

SELECT my_sequence.NEXTVAL FROM dual;
# Kết quả: 10

SELECT my_sequence.NEXTVAL FROM dual;
# Kết quả: 20

Mỗi khi ta gọi tới my_sequence.NEXTVAL thì giá trị của nó sẽ được tăng lên. Theo mặc định thì sequence hoạt động global nên bạn có thể gọi nó ở bất kì ở đâu trong câu lệnh SQL.

3. Sửa sequence trong Oracle

Bạn hoàn toàn có thể sửa sequence bằng câu lệnh ALTER SEQUENCE và đằng sau đó là những thông cần tin thay đổi, nếu thuộc tính nào bạn không liệt kê tức là nó sẽ giữ giá trị cũ như lúc khơi tạo. Hãy xem ví dụ minh họa dưới đây.

ALTER SEQUENCE my_sequence
  INCREMENT BY 1
  MINVALUE 1
  MAXVALUE 1000000
  NOCYCLE;

Bạn cần phải kiểm tra kỹ sequence có đang sử dụng ở đâu không, nếu có thì những thay đổi này có ảnh hưởng gì không nhé, khi nào chắc chắn mọi thứ ổn thì hãy thực hiện.

4. Xóa sequence trong Oracle

Cũng giống như các đối tượng khác, bạn có thể xóa sequence bằng cách sử dụng lênh DROP SEQUENCE.

DROP SEQUENCE my_seq_1;
DROP SEQUENCE my_seq_2;
DROP SEQUENCE my_schema.my_seq_3;

Ở ví dụ thứ 3 là bạn đã chỉ rõ sequence thuộc schema nào.

Một ứng dụng thường dùng của sequence trong thực tế đó là thiết lập ID tăng tự động.

Trên là những cách dùng cơ bản của sequence, nếu bạn muốn tìm hiểu chi tiết hơn thì hãy lên trang chủ của Oracle để đọc phần tài liệu hướng dẫn của nó nhé.

0