oracle數據庫中創建序列並用序列自動生成ID或編號


工作中經常需要生成指定格式的ID,例如:學生ID--S20200039,基金代碼--F20023等。這種字符+數字格式的ID類手動數據有點麻煩。今天我跟大家分享用創建序列后,再通過觸發器自動生成上述混合格式的ID的方法。當然這是我經常用的一種方法,如果大家有其他方法或者對於我下面分享的內容有更好的意見建議,在評論區留言討論。

首先我創建了學生信息表sut_info,如下:

stu_info
stu_id stu_name stu_age stu_sex
S2020001  Rose   18 famale

表中stu_id是S+7位數字組成,在后面創建序列的時候注意這一點。

第一步,創建數據表,代碼如下:

create table stu_info(
                      stu_id    varchar2(16) not null primary key
                     ,stu_name  varchar2(32)
                     ,stu_age   number(8)
                     ,stu_sex   varchar2(8)
                     );

第二步,創建序列號seq_stu_id,代碼如下:

/*為stu_id創建序列*/
create sequence seq_stu_id
       start with 2020000
       nocache;

查看序列值的方法  序列名.nextval(查看下一個值)或者   序列名.currval(查看當前值)。  這里要注意的是查看序列的初始值要先用nextval,如果對於初始值用currval會報錯。比如:查看上面創建序列的初始值的代碼如下:

/*驗證序列*/
select seq_stu_id.nextval from dual;

查詢結果為:

NEXTVAL
2020000

 

 

 

第三步,創建觸發器,實現對stu_info 表添加數據的時候用序列值自動生成學生id,代碼如下:

/*創建觸發器實現對stu_info表添加數據的時候,通過序列號自動生成stu_id,形式為:S+7位數字*/
create or replace trigger int_stu_id
          before insert
          on stu_info
          for each row
          begin
            select 'S'||seq_stu_id.nextval into:new.stu_id from dual;
          end int_stu_id;

下面對stu_info 表插入數據看看。

插入數據代碼:

/*插入數據測試觸發器*/
insert into stu_info(stu_name,stu_age,stu_sex)values('Rose',18,'famale');
insert into stu_info(stu_name,stu_age,stu_sex)values('Tom',19,'male');

上面插入了兩行代碼,可以看出來,插入數據的時候沒有插入了stu_id字段,下面查看表:

/*查看表數據*/
select * from stu_info;

查詢結果如下:

STU_ID STU_NAME STU_AGE STU_SEX
S2020000 Rose 18 famale
S2020001 Tom 19 male

 

 

 

 

從查詢結果可以看出,我們添加數據的時候觸發器被觸發,並調用序列值按指定格式給stu_info表的stu_id字段自動插入學生id。

 

 

(注:上述代碼是oracle 11g下運行,如果你用的是其他數據庫注意在觸發器里的序列和字母S的拼接,比如mysql下要用concat()函數實現拼接。)


免責聲明!

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



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