MySQL函式模擬Oracle序列

2021-10-01 14:54:06 字數 1468 閱讀 4462

oracle資料庫遷移到mysql的過程中,需要解決mysql中沒有oracle的序列功能,本人的解決方案是通過一張表用來記錄oracle中序列的名稱、當前序列的值及每次步進長度,通過倆個函式來模擬序列自增,具體**如下:

建表語句.

create

table

`sys_sequence`

(`seq_name`

varchar(50

),`seq_value`

int(18

)not

null

,`increment_by`

int(18

)not

null

)

seq_name:序列名稱

curr_value:序列起始值

increment_by:步進長度

查詢函式currval

create

definer

=`labplat`

@`%`

function

`currval`

(`v_seq_name`

varchar(50

))returns

int(18)

begin

#routine body goes here...

declare v_currval int(18

);set v_currval =1;

select seq_value into v_currval from sys_sequence where seq_name = v_seq_name;

return v_currval;

end

更新函式nextval

create

definer

=`labplat`

@`%`

function

`nextval`

(`v_seq_name`

varchar(50

))returns

int(18)

begin

#routine body goes here...

update sys_sequence set seq_value = seq_value + increment_by where seq_name = v_seq_name;

return

currval

(v_seq_name)

;end

分別建好對應的表和函式後,當需要獲取序列值的時候,呼叫nextval()函式,入參為序列名稱,nextval()函式會先根據步進長度的值更新對應序列的seq_value值,increment_by為n就更新為seq_value+n,然後nextval()中會呼叫currval()查到更新後的seq_value值並返回。

MySQL模擬Oracle序列sequence

沒發現,這麼多同學有這個需求,把文件補充一下,其實就是建立1個表,和2個儲存過程。利用表的行級鎖模擬每乙個表的序列增減。drop table if exists sys sequence create table sys sequence seq name varchar 50 not null,c...

MySQL模擬Oracle序列使用

一篇筆記開始看 注意 建立序列表時一定要有 主鍵id自增,否則為唯讀狀態不能修改遞增。序列名欄位名都更改一下即可 drop table if exists sequence create table sequence id int unsigned not null auto increment,n...

Oracle函式和mysql函式比較

1.oracle中的to number 轉換成數字 oracle select to number 123 from dual 123 select to char 33 from dual 33 mysql select conv 123 10,10 123 select cast 123 as ...