您的位置:首页 > 数据库 > Oracle

MySQL 实现Oracle序列

2017-06-29 18:54 316 查看
表结构为:

drop table if exists sequence;
create table sequence (
seq_name        VARCHAR(50) NOT NULL, -- 序列名称
current_val     INT         NOT NULL, --当前值
increment_val   INT         NOT NULL    DEFAULT 1, --步长(跨度)
PRIMARY KEY (seq_name)
);


实现currval的模拟方案

create function currval(v_seq_name VARCHAR(50))
returns integer
begin
declare value integer;
set value = 0;
select current_value into value
from sequence
where seq_name = v_seq_name;
return value;
end;


实现nextval的模拟方案

create function nextval (v_seq_name VARCHAR(50))
return integer
begin
update sequence
set current_val = current_val + increment_val
where seq_name = v_seq_name;
return currval(v_seq_name);
end;


增加设置值的函数

create function setval(v_seq_name VARCHAR(50), v_new_val INTEGER)
returns integer
begin
update sequence
set current_val = v_new_val
where seq_name = v_seq_name;
return currval(seq_name);


示例:

insert into sequence (seq_name, current_val) values ('seq1', 100);
#获取当前值
select currval('seq1');
#获取下一个值
select nextval('seq1');


参考:

http://www.cnblogs.com/goto/p/4126498.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql oracle 序列