目的: 通过该功能取代 mssql 中的表id列自动递增功能
主题一:如何通过sequence名得到一个sequence值
方法:
1. 创建一个表sequence,保存sequence的值
2. 创建一个存储过程getnextsequence,以通过它得到下一个sequence
主题二:如何通过一个表名得到一个sequence值
1. 创建一个表tablesequence,保存表中的列对应的是哪个sequence
2. 创建一个存储过程createtableseq,把表tablesequence的内容放入全局临时表@@tmptablesequence,以提高性能
3. 创建一个存储过程getnextsequencebytablename,以通过它得到下一个sequence
主题一:如何通过sequence名得到一个sequence值
方法:
1. 创建一个表sequence,保存sequence的值
表sequence:
表名
数据类型
是否为空
索引
说明
seqname
varchar2(50)
n
pk
sequence名
startwith
number
n
开始值
increment
number
n
增量
lastvalue
number
n
该sequence最后的值
minvalue
number
n
最小值
maxvalue
number
n
最大值,0表示无
cycle
bit
n
是否可循环
2. 创建一个存储过程getnextsequence,以通过它得到下一个sequence
参数:
seqname sequence名称
返回:
下一个sequence的值,如出错,返回0
流程:
1. 该存储过程通过参数seqname从表sequence取得lastvalue
2. lastvalue加上递增或递减值,得到下一个sequence值(简称@newseq)
3. 用@newseq更新该条记录
4. 返回@newseq
主题二:如何通过一个表名得到一个sequence值
1. 创建一个表tablesequence,保存表中的列对应的是哪个sequence
表tablesequence
表名
数据类型
是否为空
索引
说明
tablename
varchar2(50)
n
pk
表名
seqname
varchar2(50)
n
sequence名
2. 创建一个存储过程createtableseq,把表tablesequence的内容放入全局临时表@@tmptablesequence,以提高性能
参数:
无
返回:
无
流程:
1. 判断临时表@@tmptablesequence是否存在
2. 如不存在,创建该临时表(表格式同tablesequence),并从tablesequence取得数据, 放入临时表@@tmptablesequence
3. 创建一个存储过程getnextsequencebytablename,以通过它得到下一个sequence
参数:
@tablename 表名
返回:
下一个sequence的值,如出错,返回0
流程:
1. 该存储过程通过参数@tablename从表@@tmptablesequence取得sequence名(简称@seqname)
2. 通过@seqname从表sequence取得lastvalue
3. lastvalue加上递增或递减值,得到下一个sequence值(简称@newseq)
4. 用@newseq更新表sequnce的对应记录
返回@newseq
以上是理论,稍后,我会给出具体做法。