通過PL SQL建立序列和觸發器實現表自增欄位

2021-10-23 00:15:40 字數 2026 閱讀 4016

假設我們有乙個address表,希望實現位址編號address_id的自增

1.通過pl/sql建立序列:

首先,新建sequences物件

選擇序列所有者,並填寫序列的起始值、名稱和增量等資訊,並應用

可以檢視其sql建立語句

-- create sequence 

create

sequence seq_address_id

minvalue

10001

maxvalue

999999999999999999999999999

start

with

10001

incrementby1

cache

20;

序列建立完成後,可以通過系統表dual查詢

--查詢序列當前值

select seq_address_id.currval

from dual;

--查詢序列下一值

select seq_address_id.nextval

from dual;

注:oracle剛建立完序列後用currval查詢不了當前值的,得先用nextval查詢過後才能進行currval的查詢

到此,已經可以實現address表中位址編號欄位address_id的自增,通過插入時呼叫序列的nextval即可

insert

into address(address_id,address_name) values(seq_address_id.nextval,'第八大街');

為了使序列的呼叫方式更加方便,我們接下來要建立乙個觸發器。

2.通過pl/sql建立觸發器

首先,新建trigger物件

填寫觸發器名稱,以及下列要素並確定

觸發時間(fires):before、after、instead of

事件(event):insert、update、delete

表或檢視(table or view):選擇需要建立觸發器的表

確定後,會開啟觸發器程式編輯視窗,我們需要在紅框處編寫觸發器要執行的sql語句

這裡就是為address表的address_id欄位插入自增序列:

select seq_address_id.nextval into :new.address_id from dual;

該觸發器在資料庫註冊了表的偵聽,即當指定表address插入記錄之前,我們呼叫序列的nextval獲得新值,插入需要自增的字段。 

至此,我們就完成了address表的address_id欄位自增,執行插入sql時,該字段會自動增長

insert

into address(address_name) values('第八大街');

需要注意的是,在資料庫操作中,觸發器的使用對系統資源耗費相對較大。對於容量相對較小的表我們可以忽略觸發器帶來的效能影響。考慮到大表操作的效能問題, 我們盡可能的減少觸發器的使用,改為直接手動呼叫序列函式即可。

假設我們有乙個address表,希望實現位址編號address_id的自增

觸發器和序列

create sequence person sequence increment by 1 每次加幾個 start with 36 從1開始計數 nomaxvalue 不設定最大值 nocycle 一直累加,不迴圈 nocache 不建緩衝區建立乙個序列。create or replace tri...

PLSQL 除錯觸發器

在plsql裡是可以除錯觸發器的,相信有一部分人可能不清楚這個。以前我一直使用sql server,哈哈,養成了乙個根深蒂固的觀念,以為oracle裡觸發器也是不能除錯的,其實sqlserver裡面也是可以除錯的 寫這個的時候特意 在網上查詢了下資料 好了,為了形象說明,下面列舉個例子,如下圖所示,...

建立表序列的觸發器

建立表序列的觸發器 作用 直接往表中貼資料時讓序列的字段自動生成 檢視方法 一般為 1 觸發器使用者名稱.表名 trg,view就能夠看到相應的觸發器的 2 通過view對應的表看到最後的trigger段可以看到enable的trigger 實現 create or replace trigger ...