Oracle產生的序列總是從2開始是怎麼回事?

2021-12-30 05:58:00 字數 1098 閱讀 1804

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 by1-- 每次加幾個

10     start with1-- 從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;

ORACLE 根據分組排序產生序列號

對應的語法是這樣的 select row number over partition by col1 order by col2 seq 具體的場景如下 如果一張表中儲存了整個年級的各個班級每個同學的語文成績 create table score class varchar2 10 student ...

從ORACLE中用語句匯出序列

今天從資料庫中匯出幾張表,但發現需要的序列都沒匯出來,於是網上找找方法,發現了如下語句 select create sequence username.t.sequence name minvalue min value maxvalue max value start with last numb...

oracle修改序列從指定值開始遞增

修改當前串行使下乙個值從目標最大值的下乙個開始 建立序列 seq test create sequence seq test minvalue 1 maxvalue 9999999999999999 start with 1 increment by 1 cache 100 獲取當前序列seq te...