设为首页 加入收藏

TOP

通过存储函数获取序列
2019-09-17 18:09:06 】 浏览:30
Tags:通过 存储 函数 获取 序列

实际应用程序开发过程中,大部分业务表是由程序进行增删改,为避免冲突通常会配置序列表来配置序列生成规则。也部分表由运维人员进行配置,如系统控制参数等配置,程序不直接做增删改;

如果当前需求需要新增新的控制参数,由开发人员提供脚本,运维执行;

通常在插入数据时,主键的生成,通常采用的是max(t.id)+1,可能会出现序列表的值小于数据表值情况,导致实际程序运行获取序列插入主键冲突的情况。

 

CREATE OR REPLACE FUNCTION F_SEQUENCE(i_busi_serial_name in VARCHAR2, i_num in NUMBER) return number is
V_CURRENT NUMBER(15);
PRAGMA AUTONOMOUS_TRANSACTION;
begin
begin
select A.SEQUENCE INTO V_CURRENT from CAREFX_TABLE_SEQ A WHERE A.TABLE_NAME = i_busi_serial_name for update;
exception
//当序列表(CAREFX_TABLE_SEQ)不存在该表序列数据时,插入序列记录;
when NO_DATA_FOUND THEN
INSERT INTO CAREFX_TABLE_SEQ(TABLE_NAME,SEQUENCE) values (i_busi_serial_name,1);
--查询出当前序列值
select A.SEQUENCE INTO V_CURRENT from CAREFX_TABLE_SEQ A WHERE A.TABLE_NAME = i_busi_serial_name for update;
END;
//将当前序列表对应序列值+1;
UPDATE CAREFX_TABLE_SEQ A SET A.SEQUENCE = A.SEQUENCE + DECODE(i_num,NULL,1,i_num) WHERE A.TABLE_NAME = i_busi_serial_name;
COMMIT;
//返回查询的序列值;
return(V_CURRENT);
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
return NULL;

end F_SEQUENCE_GEN;

CAREFX_TABLE_SEQ:序列表
存在序列表配置的业务表:
使用 select f_sequence_gen('BI',1) FROM DUAL,替换 SELECT max(t.id)+1 FROM bi t;
对于通过业务序列来进行数据手动插入的业务表,使用上述存储函数来获取序列值:

 

 

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇xtrabackup备份mysql数据库方法 下一篇MySQL数据库在IO性能优化方面的设..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目