1、创建序列化表sequence
这里介绍下,seq_name为序列名称,current_val为当前值(初始化时可填0)increment_val为增加的跨度。
2、创建currval函数用于获取序列当前值
DELIMITER $$
USE `oasystem`$$
DROP FUNCTION IF EXISTS `currval`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `currval`(v_seq_name VARCHAR(50)) RETURNS INT(11)
BEGIN
DECLARE VALUE INTEGER;
SET VALUE = 0;
SELECT current_val INTO VALUE FROM sequence WHERE seq_name = v_seq_name;
RETURN VALUE;
END$$
DELIMITER ;
3、创建nextval函数,传入序列名称后调用该函数序列值将自增
DELIMITER $$
USE `oasystem`$$
DROP FUNCTION IF EXISTS `nextval`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `nextval`(v_seq_name VARCHAR(50)) RETURNS INT(100)
BEGIN
UPDATE sequence SET current_val = current_val + increment_val WHERE seq_name = v_seq_name;
RETURN currval(v_seq_name);
END$$
DELIMITER ;
4、测试
在数据库表sequence中录入一个序列名称为test的序列,初始值为0,增值为1。
执行sql语句后,返回自增值。
查看 sequence表,发现序列当前值已经自增了。
到此为止,模拟oracle序列已经完成了。