用Oracle11g創建序列后插入數據的初始值老是從2開始


Oracle新表使用序列(sequence)作為插入值,初始值不是第一個,

oraclesequence

 1 --創建測試表--
 2 CREATE TABLE tbl_test(
 3         test_id NUMBER PRIMARY KEY,
 4         test_name VARCHAR2(20)
 5  );
 6  
 7  --為tbl_test創建序列--
 8 CREATE SEQUENCE seq_test
 9      INCREMENT BY 1 -- 每次加幾個
10      START WITH 1 -- 從1開始計數
11  ;
12  
13  --插入測試數據--
14  INSERT INTO tbl_test VALUES(seq_test.nextval,'測試');
15  COMMIT;
16  
17  --查詢表中的數據
18  SELECT * FROM tbl_test;

問題原因:

·當我們使用序列作為插入數據時,如果使用了“延遲段”技術,則跳過序列的第一個值

·Oracle從 11.2.0.1版本開始,提供了一個“延遲段創建”特性:

當我們創建了新的表(table)和序列(sequence),
在插入(insert)語句時,序列會跳過第一個值(1)。
所以結果是插入的序列值從 2(序列的第二個值) 開始, 而不是 1開始。

想要解決這個問題有兩種方法: 
 更改數據庫的“延遲段創建”特性為false(需要有相應的權限)

 1 ALTER SYSTEM SET deferred_segment_creation=FALSE; 

或者 
 在創建表時讓seqment立即執行,如: 

1 CREATE TABLE tbl_test(
2     test_id NUMBER PRIMARY KEY, 
3     test_name VARCHAR2(20)
4 )
5  SEGMENT CREATION IMMEDIATE;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM