msql 实现sequence功能增强

create table sequence (  
    seq_name        VARCHAR(50)  NOT NULL COMMENT ‘序列名称‘,
    min_val         INT  UNSIGNED         NOT NULL COMMENT ‘最小值‘,
    max_val         INT  UNSIGNED         NOT NULL COMMENT ‘最大值‘,
    if_cycle        INT  UNSIGNED         NOT NULL COMMENT ‘是否循环‘,
    if_use          INT  UNSIGNED         NOT NULL COMMENT ‘是否使用中:0:未使用,1:已使用‘,
    current_val     INT  UNSIGNED         NOT NULL COMMENT ‘当前值‘,
    increment_val   INT  UNSIGNED         NOT NULL DEFAULT 1 COMMENT ‘步长(跨度)‘,
    PRIMARY KEY (seq_name)
);

delimiter $$

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

create function nextval(v_seq_name VARCHAR(50))
returns INTEGER
begin
    declare v_curr_val INTEGER;
    declare v_increment_val INTEGER;
    declare v_if_cycle INTEGER;
    declare v_next_val INTEGER;
    declare v_min_val INTEGER;
    declare v_max_val INTEGER;

update sequence set if_use = 1 where seq_name = v_seq_name;
    select current_val, min_val, max_val, increment_val, if_cycle
    into v_curr_val, v_min_val, v_max_val, v_increment_val, v_if_cycle from sequence where seq_name = v_seq_name;
    set v_next_val := v_curr_val + v_increment_val;
    if (v_next_val > v_max_val) and (v_if_cycle = 0) then
        set v_next_val := -1;
    else
        set v_next_val := mod(v_next_val, v_max_val + 1);
        IF v_next_val < v_min_val then
            set v_next_val := v_min_val;
        end if;
        update sequence set current_val = v_next_val where seq_name = v_seq_name;   
    end if;  
    update sequence set if_use = 0 where seq_name = v_seq_name;   
    return v_next_val;
end$$

create function setval(v_seq_name VARCHAR(50), v_new_val INTEGER)  
returns integer
begin
    declare v_min_val int;
    declare v_max_val int;
    update sequence set if_use = 1 where seq_name = v_seq_name;    
    select min_val, max_val into v_min_val, v_max_val from sequence where seq_name = v_seq_name;
    if (v_new_val > v_max_val) or (v_new_val < v_min_val) then
        set v_new_val := -1;
    else
        update sequence set current_val = v_new_val where seq_name = v_seq_name;
    end if;
    update sequence set if_use = 0 where seq_name = v_seq_name;
    return v_new_val;
end$$

delimiter ;

时间: 2024-11-09 10:50:42

msql 实现sequence功能增强的相关文章

C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 区域管理功能增强(电子商务方向)

由于公司是面向全国服务的.全国各地都有分公司,需要管理到覆盖全国的各种业务,各种业务系统信息系统的数据都需要规范化. 公司开展网络订单功能,在全国范围内实现网络下单.提高工作效率,提高各公司之间的数据交换效率,承接订单的效率,防止沟通交流中的出错率. 通用权限管理系统组件已经实现了内置的电子商务基础数据管理功能,提供各种接口调用,为快速开发大型电子商务系统做个稳定的基础. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 区域管理功能增强(电子商务方向),布布扣,bubuko.

DevExpress v15.1:Reporting控件功能增强(二)

<下载最新版DevExpress Reporting v15.1.5> 增强跨平台功能 多值查找参数 现在,您可以创建一个可以存储多个值的参数.在打印预览中默认编辑器的这些参数是一个多选下拉列表,这允许最终用户通过选择复选框所需的值来指定多个参数值. 自动Drill Down 现在您可以创建交互式的drill-down报表,无需编写任何代码. 轻松访问格式规则和样式 在这个版本中,所有的报表格式规则和样式都可以通过报表资源管理器中的相应节点进行访问.您可以使用拖放操作轻松地应用一个格式规则和样

VMare中安装“功能增强工具”,实现CentOS5.5与win7host共享文件夹的创建

读者如要转载,请标明出处和作者名,谢谢. 地址01:http://space.itpub.net/25851087 地址02:http://www.cnblogs.com/zjrodger/ 地址03:http://blog.csdn.net/zjrodger 作者名:zjrodger [OS和其他辅助软件参数] Guest OS: CentOS 5.5 Host OS: Win 7 32 bit OS安装介质:CentOS-5.5-i386-bin-DVD.iso 虚拟机:VMware wor

Java SE 5.0 - SE 8 的功能增强

Table of Contents 前言 Java 5.0 Generics Enhanced for Loop Autoboxing Typesafe Enums Varargs Static Import Annotations Java SE 6 Java SE 7 Binary Literals Underscores in Numeric Literals Strings in switch Statements Type Inference for Generic Instance

MySql实现sequence功能的代码

mysql实现sequence功能 1.建立sequence记录表 CREATE TABLE `sys_sequence` ( `seq_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `min_value` int(11) NOT NULL, `max_value` int(11) NOT NULL, `current_value` int(11) NOT NULL, `increment_value` i

Oracle12c中数据泵新特性之功能增强(expdp, impdp)

Oracle12c中数据泵新特性之功能增强(expdp, impdp) Oracle的数据泵功能在10g中被引进.本文对数据泵在12c中的增强做一个概览. 1.   禁用日志选项(DISABLE_ARCHIVE_LOGGING) Impdp的TRANSFORM参数已经扩展为包括DISABLE_ARCHIVE_LOGGING选项.该选项的默认值为 "N",不会影响日志行为.将该选项设置为"Y",这将会使表和索引在导入前将日指属性设置为NOLOGGING,从而导入期间减

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https://github.com/cyq1162/taurus.mvc 下面对增强的功能进行介绍: 1:跨域请求 除了常规的的JsonP跨域,Html5开始支持增强跨域,则变得更为方便,只需要服务端请求头输出: 1  if (context.Request.UrlReferrer != null && 

Oracle12c功能增强新特性之维护&amp;amp;升级&amp;amp;恢复&amp;amp;数据泵等

1.   内容提要 1)   表分区维护的增强. 2)   数据库升级改善. 3)   跨网络还原/恢复数据文件. 4)   数据泵的增强. 5)   实时ADDM. 6)   并发统计信息收集. 2.   表分区维护的增强 在其它文章中,我说明了怎样在线或离线把一个表分区或子分区移到一个不同的表空间. 这部分,你将学习和表分区相关的其它方面的增强. 2.1.  添加多个新分区. 12c R1之前,在一个已分区表上仅仅能一次添加一个分区.为了添加多个分区.你必须每添加一个新分区单独运行一个ALT

DevExpress v15.1:ASP.NET WebForms功能增强(三)

下载最新版DevExpress ASP.NET Controls v15.1.5 ASP.NET HTML Editor 占位符(邮件合并) 占位符允许最终用户创建文本模板,这些占位符可以被替换为所需的值(从数据库). 标签检查器(文档结构路径导航)和所选的标签属性编辑器 新的标签检查器允许最终用户浏览一个标签层次结构.删除标签,并使用标签属性编辑器自定义标签属性. 内容元素过滤 DevExpress HTML Editor现在允许您过滤内容元素,您可以指定标签.属性和样式属性的过滤规则. 增强