oracle中的CURRVAL和NEXTVAL用法
1.什麼是sequence?其作用是什麼?
在Oracle資料庫中,什麼是序列呢?其中的作用是什麼呢?其實sequence
是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(型別為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,在插入之前,獲取序列號nextval
值,然後進行插入。也可以通過查詢檢查當前值,或使序列增至下一個值。
2.如何定義一個sequence
?
在oracle中sequence
就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方或者在實際開發中,比如一個需求表格中的需求ID是唯一主鍵,都可以用sequence
來獲取。
首先在用Oracle序列號之前,我們首先得建立一個序列然後就可以通過CURRVAL
、NEXTVAL
,獲取當前表中的返回sequence
的當前值、下一個squence
的值。可以通過下面的語句來建立Squence
:
create sequence INR_REQUIRMENT_SQUENCE
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數
NOMAXVALUE -- 不設定最大值
NOCYCLE -- 一直累加,不迴圈
CACHE 10;
上面的語句則建立了一個INR_REQUIRMENT_SQUENCE
序列
3.如何獲取一個sequence
的值?
SELECT INR_REQUIRMENT_SQUENCE.CURRVAL FROM dual –獲取當前的sequence的值,
第一次NEXTVAL
返回的是初始值;隨後的NEXTVAL
會自動增加你定義的INCREMENT BY
值, 然後返回增加後的值。CURRVAL 總是返回當前sequence的值,但是在第一次NEXTVAL 初始化之後才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次sequence的值, 所以如果你在同一個語句裡面使用多個NEXTVAL。
4.可以在哪些地方使用Sequence?
- 不包含子查詢、snapshot、VIEW的 SELECT 語句
- INSERT語句的子查詢中
- NSERT語句的VALUES中
- UPDATE 的 SET中
- 在實際開發中,比如一個表中的主鍵需要先得到主鍵ID,可以用
NEXTVAL
來獲下一個取序列值,然後再進行其他操作。
5.如何刪除Sequence?
DROP sequence policy_id_seq;
policy_id_seq為sequence的名字,如果要改變sequence中的初始值,必須先刪除序列號然後再進行建立。你或者是該sequence
的owner
,或者有ALTER ANY sequence
許可權才能改動sequence
,直接用Alter
語句進行sequence
的更新。
oracle 不一樣的獲取nextval
方式
CREATE OR replace FUNCTION Get_seq_next (seq_name IN VARCHAR2)
RETURN NUMBER
IS
seq_val NUMBER;
BEGIN
EXECUTE IMMEDIATE 'select '|| seq_name|| '.nextval from dual' INTO seq_val;
RETURN seq_val;
END get_seq_next;
相關文章
- Oracle中Nextval用法SEQUENCE與SYS_GUID()OracleGUI
- 非空校驗在oracle和mysql中的用法OracleMySql
- oracle樹中prior的用法Oracle
- oracle中listagg()和wmsys.wm_concat()基本用法Oracle
- oracle中substr() instr() 用法Oracle
- oracle comment on的用法Oracle
- Java中ThreadLocal的用法和原理Javathread
- C#中?和??及?:的用法C#
- js中try和catch的用法JS
- React中的Context和Portals用法ReactContext
- JS中的!=、== 、!==、=== 的用法和區別JS
- mysql實現nextVal功能MySql
- ORACLE SEQUENCE用法Oracle
- 【Oracle的NVL函式用法】Oracle函式
- Java 中 this 和 super 的用法詳解Java
- js中!和!!的區別與用法JS
- sql中union和union all的用法SQL
- React 中 getDerivedStateFromProps 的用法和反模式React模式
- Python中__init__的用法和理解Python
- Linq中 AsQueryable(), AsEnumerable()和ToList()的區別和用法
- C++中break和continue的用法和區別C++
- fstream中ifstream和ofstream的簡單用法
- Lombok中@Builder和@SuperBuilder註解的用法LombokUI
- JQuery中html()和val()的用法區別jQueryHTML
- Mybatis中updateByPrimaryKeySelective和updateByPrimaryKey的用法區別MyBatis
- php的lavarel框架中join和orWhere的用法PHP框架
- Oracle中的for update 和 for update nowaitOracleAI
- ORACLE中%TYPE和%ROWTYPE的使用Oracle
- PHP 中 bind 的用法 self 和 static 的區別PHP
- Python中urllib和urllib2庫的用法Python
- Java 中 this 和 super 的用法概述及異同Java
- maven中profile元素的作用意義和用法Maven
- Laravel框架中 getClientIps() 原理和用法Laravel框架client
- 【TUNE_ORACLE】Oracle Hint之概念與用法Oracle
- oracle dblink用法總結和expdp和impdp利用dblink倒入匯出到本地Oracle
- Oracle中exists和in的效能差異Oracle
- Oracle中Date和Timestamp的區別Oracle
- oracle中distinct和group by的區別Oracle