程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 用Oracle11g創建序列後插入數據的初始值老是從2開始,oracle11g序列

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

編輯:Oracle教程

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


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;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved