本篇文章给大家带来了关于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:
另外要注意,ROLLBACK并不能使序列值回滚。
如:
ALTER SEQUENCE invoice_seq INCREMENT BY 2 MAXVALUE 10 NOCACHE NOCYCLE;
修改序列时,有如下几个限制:
DROP SEQUENCE invoice_seq;
1、创建一个序列
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中文网其他相关文章!