這篇文章為大家帶來了關於Oracle的相關知識,詳細講解了Oracle中的序列SEQUENCE,文中透過範例程式碼介紹的非常詳細。對大家的學習或工作有一定的參考借鏡價值,希望對大家有幫助。
推薦教學:《Oracle影片教學》
Oracle的序列是一種資料庫對象,主要作用是用來產生唯一值。序列被創建以後可以透過資料字典找到序列對象,因此序列可以被多個對象共用。
序列使用CREATE SEQUENCE語法進行建立:
CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];
例如:
CREATE SEQUENCE invoice_seq INCREMENT BY 1 START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;
一旦序列被創建,序列的創建程式碼就被文字化在資料字典中,可以在user_objects數據字典中看到,如:
SELECT object_name,object_id,object_type FROM user_objects WHERE object_name = 'INVOICE_SEQ';
在user_sequences表中保存了序列明細資訊:
SELECT sequence_name, min_value, max_value, increment_by, last_number FROM user_sequences;
使用如下:
SELECT invoice_seq.CURRVAL,invoice_seq.NEXTVAL FROM DUAL; INSERT INTO invoice (invoice_id, vendor_id, invoice_number, invoice_total ) VALUES (invoice_seq.NEXTVAL, 10, 'INV' || invoice_seq.CURRVAL, 100 );
可以在下面的上下文中使用NEXTVAL和CURRVAL:
不能再以下的上下文中使用NEXTVAL和CURRVAL:
ALTER SEQUENCE invoice_seq INCREMENT BY 2 MAXVALUE 10 NOCACHE NOCYCLE;修改序列時,有以下幾個限制:
DROP SEQUENCE invoice_seq;
create sequence sq_recid minvalue 1 maxvalue 999999 increment by 1 start with 1 noCYCLE;2、建立一個觸發器
create or replace trigger trg_test before insert on test for each row begin select sq_recid.nextval into :new.ID from dual; end; alter trigger trg_test enable;3、在C#中也可以手動插入序列到表中
string sql="insert into test(ID,otherCol)value (Sql_recid.nextval,***) retuing ID into :ID"#推薦教學:《
Oracle影片教學》
以上是Oracle的序列SEQUENCE解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!