MySQL模拟Oracle序列sequence

DROP TABLE IF EXISTS sys_sequence ;

CREATE TABLE sys_sequence (
  seq_name VARCHAR (50) NOT NULL,
  curr_value BIGINT NOT NULL DEFAULT 0,
  increment_by INT NOT NULL DEFAULT 1,
  PRIMARY KEY (seq_name)
) ENGINE = INNODB ;

INSERT INTO sys_sequence VALUES ('SEQ_TEST_NO',10000,1);

DELIMITER $$
DROP FUNCTION IF EXISTS currval $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    FUNCTION currval(v_seq_name VARCHAR (50))
    RETURNS BIGINT
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN
    DECLARE v_currval BIGINT;
      SET v_currval = 1 ;
      SELECT
        curr_value INTO v_currval
      FROM
        sys_sequence
      WHERE seq_name = v_seq_name ;
      RETURN v_currval ;
    END$$

DELIMITER ;

-- SELECT `currval`('SEQ_TEST_NO');

DELIMITER $$
DROP FUNCTION IF EXISTS `nextval` $$

CREATE FUNCTION `nextval` (`v_seq_name` VARCHAR (50)) RETURNS BIGINT (20) CONTAINS SQL

BEGIN
  UPDATE
    sys_sequence
  SET
    `curr_value` = last_insert_id(`curr_value` + `increment_by`)
  WHERE `seq_name` = v_seq_name ;
  RETURN last_insert_id();
END $$

DELIMITER ;

时间: 2024-10-18 11:16:45

MySQL模拟Oracle序列sequence的相关文章

Mysql实现Oracle的INSTR函数的方法实例

如果我们的项目要从Oracle迁移到Mysql,但MySQL的instr函数只能查找子串是否在父串中,没法按照出现的次数进行查找. 这里我自己写了一个,以便迁移.当然我这里仅仅针对的是迁移,可能没有完全实现原有函数的细节. Oracle 里用了几次如下的调用, SQL> select instr('This is belong to you, but not to me.','to',1,1) as pos from dual;                       POS        

Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例_oracle

问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现. 示例: 1.建立表 复制代码 代码如下: create table user  (       id   number(6) not null,       name   varchar2(30)   not null primary key  ) 

浅谈Oracle的Sequence序列

Oracle的Sequence是一种数据库对象,它可以生成有序数字,主要用于主键的自动生成.如果没有 Sequence,主键的自动生成必须得在代码逻辑里实现,大致过程是:获取当前主键值,新主键值=当前 主键值+增量.如果多个用户同时请求新主键,则会产生并发等待,影响效率,Sequence就是用来解决 这个问题. 创建Sequence CREATE SEQUENCE emp_sequence INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE

MYSQL到ORACLE程序迁移的注意事项(转载)

mysql|oracle|程序 MYSQL到ORACLE程序迁移的注意事项                                                  2001-09     有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到ORACLE的需求,应用程序也要相应做一些修改.本人总结出以下几点注意事项,希望对大家有所帮助. 1. 自动增

ORACLE序列总结

序列介绍 序列是一个计数器,它并不会与特定的表关联.通过创建Oracle序列和触发器实现表的主键自增. 序列的用途一般用来填充主键和计数. 序列使用 1.创建序列 ORACLE序列的语法格式为: CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MINVALUE n|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHE n|NOCACHE}];   1)INCREMENT BY用于定义序列的步长,如果省略

SQL基础--> 序列(SEQUENCE)、同义词(SYNONYM)

--============================================= --SQL基础--> 序列(SEQUENCE).同义词(SYNONYM) --=============================================   一.序列     是一个Oracle对象,提供唯一的数字,在需要时根据指定的增量值来递增,通常用于产生主键值     类似于SQL server中的IDENTITY(int,1,1) 或者列为IDENTITY列.SQL serve

MySQL转换Oracle的需要注意的七个事项_Mysql

下面总结出MySQL转换Oracle的几点注意事项,希望对大家有所帮助. 1.自动增长的数据类型处理 MySQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.Oracle没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段. CREATE SEQUENCE 序列号的名称 (最好是表名 序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE: 其中最大的值按字段的长

如何使用Oracle序列

如何使用Oracle序列: Oracle序列(sequence)是一种数据库项,能够生成一个整数序列.通常用于填充数字类型的主键列. 1.创建序列: CREATE SEQUENCE sequence_name [START WITH start_num] [INCREMENT BY increment_num] [{MAXVALUE maximum_num|NOMAXVALUE}] [{MINVALUE minimum_num|NOMINVALUE}] [{CYCLE|NOCYCLE}] [{C

oracle 序列

序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.创建序列需要CREATE SEQUENCE系统权限.序列的创建语法如下:Sql代码 CREATE SEQUENCE 序列名    [INCREMENT BY n]    [START WITH n]    [{MAXVALUE/ MINVALUE n|NOMAXVALUE}]    [{CYC