Hanya urutan bernilai integer yang dapat dibuat.
Jadi pernyataannya harus:
CREATE SEQUENCE invoice_nun
START WITH 1
INCREMENT BY 1;
Anda dapat mengonversi nilai yang diambil menjadi string dan menambahkan awalan yang sesuai.
select 'INV'||to_char(invoice_nun.nextval,'FM09999999')
from dual;
Anda dapat membuat fungsi untuk mensimulasikan urutan yang mengembalikan nilai string yang sesuai
create or replace function next_invoice_nun return varchar2
as
begin
return('INV'||to_char(invoice_nun.nextval,'FM09999999') );
end;
/
sekarang Anda dapat melakukannya
select next_invoice_nun
from dual;
Urutan seperti yang didefinisikan di atas menggunakan beberapa nilai default. Ini didokumentasikan dalam Referensi Bahasa SQL Database . Ini setara dengan pernyataan berikut
CREATE SEQUENCE invoice_nun
CACHE 20
NOORDER
START WITH 1
INCREMENT BY 1;
Anda harus mengetahui hal-hal berikut:
1) Jika transaksi mengambil nilai urutan dan memutar kembali maka nilai urutan hilang. Jadi jika Anda melakukan hal berikut:
-- 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 faktur INV00000001
and
INV00000003are inserted in the
invoicetable but the invoice id
INV00000002` hilang karena pernyataan yang mengambilnya dibatalkan
2) Jika instance crash, semua urutan yang ada di cache instance akan hilang. Dalam contoh Anda, nilai default untuk cache yang digunakan adalah 20. Jadi, jika instance mogok, paling banyak 20 nilai urutan dapat hilang. alternatifnya adalah menggunakan kata kunci NOCYCLE
jika Anda membuat urutan tetapi ini akan membawa hukuman kinerja.
3) Jika Anda menggunakan nomor urut sistem RAC tidak mewakili urutan pengambilan pernyataan. Jadi kemungkinan pernyataan pertama mendapat id INV00000021
dan pernyataan kedua mendapatkan id INV00000001
jika pernyataan kedua dieksekusi pada contoh yang berbeda dari pernyataan pertama. Ini karena instans mengambil 20 nomor urut pertama dalam cache-nya dan instans lainnya mengambil 20 nomor urut kedua dalam cache-nya. Pernyataan pertama dieksekusi pada instance yang mengambil 20 nomor urut kedua. Anda dapat menggunakan ORDER
kata kunci untuk menghindari hal ini tetapi sekali lagi ini akan membawa hukuman kinerja
Jadi seseorang dapat menghindari 2) dan 3) untuk harga penalti kinerja tetapi tidak ada cara untuk menghindari 2).