Chỉ các chuỗi có giá trị số nguyên mới có thể được tạo.
Vì vậy, câu lệnh phải là:
CREATE SEQUENCE invoice_nun
START WITH 1
INCREMENT BY 1;
Bạn có thể chuyển đổi giá trị đã tìm nạp thành một chuỗi và thêm tiền tố thích hợp.
select 'INV'||to_char(invoice_nun.nextval,'FM09999999')
from dual;
Bạn có thể tạo một hàm để mô phỏng một chuỗi trả về các giá trị chuỗi thích hợp
create or replace function next_invoice_nun return varchar2
as
begin
return('INV'||to_char(invoice_nun.nextval,'FM09999999') );
end;
/
bây giờ bạn có thể làm
select next_invoice_nun
from dual;
Trình tự như đã định nghĩa ở trên sử dụng một số giá trị mặc định. Điều này được ghi lại trong Tham chiếu ngôn ngữ SQL của cơ sở dữ liệu . Nó tương đương với câu lệnh sau
CREATE SEQUENCE invoice_nun
CACHE 20
NOORDER
START WITH 1
INCREMENT BY 1;
Bạn nên biết những điều sau:
1) Nếu một giao dịch tìm nạp một giá trị trình tự và quay trở lại thì giá trị trình tự sẽ bị mất. Vì vậy, nếu bạn làm như sau:
-- fetch invoice_id INV00000001
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
commit;
-- fetch invoice_id INV00000002
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
rollback;
-- fetch invoice_id INV00000003
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
commit;
id hóa đơn INV00000001
and
INV00000003 are inserted in the
bảng table but the invoice id
INV00000002` bị mất vì câu lệnh tìm nạp nó đã được khôi phục lại
2) Nếu một cá thể bị treo, tất cả các chuỗi có trong bộ nhớ cache của cá thể đó sẽ bị mất. Trong ví dụ của bạn, giá trị mặc định cho bộ nhớ cache được sử dụng là 20. Vì vậy, nếu các trường hợp gặp sự cố, nhiều nhất 20 giá trị trình tự có thể bị mất. một gốc thay thế là sử dụng từ khóa NOCYCLE
nếu bạn tạo trình tự nhưng điều này sẽ dẫn đến các hình phạt về hiệu suất.
3) Nếu bạn đang sử dụng một số thứ tự hệ thống RAC không đại diện cho thứ tự tìm nạp câu lệnh. Vì vậy, có thể câu lệnh đầu tiên nhận id INV00000021
và câu lệnh thứ hai nhận id INV00000001
nếu câu lệnh thứ hai được thực thi trên một phiên bản khác với câu lệnh đầu tiên. Điều này là do cá thể đã tìm nạp 20 số thứ tự đầu tiên trong bộ nhớ cache của nó và cá thể khác đã tìm nạp 20 số chuỗi thứ hai trong bộ nhớ cache của nó. Câu lệnh đầu tiên được thực hiện trên phiên bản lấy 20 số thứ tự thứ hai. Bạn có thể sử dụng ORDER
từ khóa để tránh điều này nhưng điều này một lần nữa sẽ mang lại các hình phạt về hiệu suất
Vì vậy, người ta có thể tránh 2) và 3) cho cái giá của các hình phạt thực hiện nhưng không có cách nào để tránh 2).