ORACLE SEQUENCE
ORACLE SEQUENCE(序列)序列是使用者建立的資料庫物件,他可以有多個使用者共享,用來生成唯一的整數。sequence屬於某個使用者。
序列號的儲存和生成與表無關,因此,同一個序列可以用於多個表。但這樣會引起應用的很多麻煩,因此,建議每個表都是用一個sequence(序列)
序列特性:1、自動生成唯一編號
2、是一個可共享的物件
3、通常用於建立主鍵值
4、替換應用程式程式碼
5、如果將序列快取記憶體到記憶體中,則可以提高訪問序列值的效率
建立序列語法
CREATE SEQUENCE sequence
[START WITH n]
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
EX:
CREATE SEQUENCE employee_seq
START WITH 10000
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
NOCACHE;
說明:如果指定CACHE值,oracle就可以預先在記憶體裡面放置一些sequence,這樣存取的快些。cache裡面的取完後,oracle自動再取一組到cache。 使用cache或許會跳號,比如資料庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失. 所以可以在create sequence的時候用nocache防止這種情況。
序列相關資料字典
USER_OBJECTS
USER_SEQUENCES
EX:
SQL> SELECT object_name,object_name,status
FROM user_objects
WHERE lower(object_name)='employee_seq';
OBJECT_NAME OBJECT_NAME STATUS
-------------------------- ---------------------------- --------------
EMPLOYEE_SEQ EMPLOYEE_SEQ VALID
SQL> SELECT * FROM user_sequences
2 WHERE LOWER(SEQUENCE_NAME)='employee_seq';
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CY OR CACHE_SIZE LAST_NUMBER
--------------------------- ------------------ ----------------- ----------------------- ----- ----- ----------------------------- ----------------------
EMPLOYEE_SEQ 1 1.0000E+27 1 N N 20 10020
NEXTVAL和CURRVAL偽列
1、NEXTVAL會返回下一個可用的序列值。
2、CURRVAL會獲得當前序列值。
3、第一次使用時必須對序列發出NEXTVAL,然後CURRVAL才能包含值,否則,oracle會丟擲ORA-08002: sequence EMPLOYEE_name.CURRVAL is not yet defined in this session
EX:
SQL> SELECT employee_seq.nextval FROM dual;
NEXTVAL
-------------
10000
SQL> SELECT employee_seq.currval FROM dual;
CURRVAL
---------------
10000
使用NEXTVAL和CURRVAL的規則
可以在以下情況下使用:
1、不屬於子查詢一部分的SELECT 語句的SELECT 列表。
2、INSERT 語句中的子查詢的SELECT 列表。
3、INSERT 語句的VALUES 子句。
4、UPDATE 語句的SET 子句。
不能再以下情況下使用:
1、檢視的SELECT 列表。
2、帶有DISTINCT關鍵字的SELECT 語句。
3、帶有GROUP BY 、HAVING或ORDER BY 子句的SELECT 語句。
4、SELECT、DELETE或UPDATE語句中的子查詢。
5、CREATE TABLE或ALTER TABLE語句中的DEFAULT表示式。
修改序列語法
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
修改序列的說明:
1、對序列具有ALTER許可權。
2、修改只會影響以後發生的序列號。
3、如果要從不同的序號處重新開始,則不行刪除原有的序列然後重新建立。
4、系統會執行一些驗證操作。如:系統無法強加一個小於當前序號的新MAXVALUEF。否則丟擲ORA-04009: MAXVALUE cannot be made to be less than the current value。
刪除序列語法
DROP SEQUENCE sequence;
需要具備DROP (ANY) SEQUENCE許可權。
1、不屬於子查詢一部分的SELECT 語句的SELECT 列表。
2、INSERT 語句中的子查詢的SELECT 列表。
3、INSERT 語句的VALUES 子句。
4、UPDATE 語句的SET 子句。
不能再以下情況下使用:
1、檢視的SELECT 列表。
2、帶有DISTINCT關鍵字的SELECT 語句。
3、帶有GROUP BY 、HAVING或ORDER BY 子句的SELECT 語句。
4、SELECT、DELETE或UPDATE語句中的子查詢。
5、CREATE TABLE或ALTER TABLE語句中的DEFAULT表示式。
修改序列語法
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
修改序列的說明:
1、對序列具有ALTER許可權。
2、修改只會影響以後發生的序列號。
3、如果要從不同的序號處重新開始,則不行刪除原有的序列然後重新建立。
4、系統會執行一些驗證操作。如:系統無法強加一個小於當前序號的新MAXVALUEF。否則丟擲ORA-04009: MAXVALUE cannot be made to be less than the current value。
刪除序列語法
DROP SEQUENCE sequence;
需要具備DROP (ANY) SEQUENCE許可權。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9390331/viewspace-715767/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE SEQUENCE用法Oracle
- Oracle - Sequence序列Oracle
- Oracle Sequence NocacheOracle
- Oracle序列sequenceOracle
- Oracle之Sequence(序列)Oracle
- Oracle Sequence Audses$研究Oracle
- oracle sequence語法Oracle
- oracle sequence 試用Oracle
- oracle的scn及sequenceOracle
- Oracle中Sequence的使用Oracle
- oracle中sequence使用的限制Oracle
- sequence to sequence模型模型
- Oracle -- 批次更新sequence的儲存Oracle
- Oracle -- 批量更新sequence的儲存Oracle
- ORACLE SEQUENCE的簡單介紹Oracle
- Oracle Sequence Cache 引數說明Oracle
- Oracle中sequence cache的測試Oracle
- Oracle中sequence的使用方法Oracle
- 不同於Oracle:SEQUENCE的區別Oracle
- 【小竅門tip】oracle sequence 修改增量值Oracle
- Oracle 基本操作之 建立自增欄位方法-ORACLE SEQUENCEOracle
- Sequence recognition
- Oracle建立自增欄位方法-ORACLE SEQUENCE的簡單介紹Oracle
- [20220321]探究oracle sequence.txtOracle
- 在Hibernate中關於Oracle sequence的使用KHOracle
- Oracle 12c新特性之Sequence的Session特性OracleSession
- Oracle中Nextval用法SEQUENCE與SYS_GUID()OracleGUI
- 【oracle】ORA-16038: log 2 sequence# 98 cannot be archivedOracleHive
- PostgreSQL 序列(Sequence)SQL
- PostgreSQL sequence (一)SQL
- Oracle建立自增欄位方法-ORACLE SEQUENCE的簡單介紹(轉帖)Oracle
- 【轉】MySQL中增加sequence管理功能(模擬建立sequence)MySql
- python sequence序列Python
- mysql實現sequenceMySql
- 3. Swift SequenceSwift
- request gap sequence is FailedAI
- ACM Longest Repeated SequenceACM
- 詳解序列(sequence)