1. 概述
1.1 版本
报表服务器版本 | 插件版本 |
---|---|
11.0 | 1.0 |
1.2 应用场景
与oracle数据库的序列号功能类似。可用于生成数据库主键。代替数据库序列功能,方便报表在不同数据库的移植。
1.3 功能描述
用函数生成序列号。
主要用于填报生成主键功能,请不要用于报表展示场景。
2. 插件介绍
2.1 插件安装
点击下载插件:序列号函数插件
设计器插件安装方法请参见:设计器插件管理
服务器安装插件方法请参见:服务器插件管理
2.2 操作方法
2.2.1 序列管理
在设计器的服务器菜单下点击序列管理菜单
开始值:序列产生的第一个值。
最大值:序列的最大值,能使用的最大值为9223372036854775807 。
增加值:每次获取序列下个值时,在当前值基础上增加的值。
循环:若开启循环,当获取序列下个值超过序列的最大值时,则从开始值重新生成值。
当前值:若勾选,则可以修改序列的当前值。
2.2.2 序列号函数
SEQUENCE_CURRENT_VALUE:返回序列的当前值。
SEQUENCE_CURRENT_VALUE(seq_name, [min_length], [repeat_value])
seq_name:序列名称;
min_length:序列值的最小长度,若未设置,则返回序列原值,若设置序列原值没有最小长度,则会填充补齐到最小长度,若值为正值,则在左侧填充,若为负值,则在右侧填充;
repeat_value:填充值,默认值为0。
SEQUENCE_NEXT_VALUE:返回序列的下个值。
SEQUENCE_NEXT_VALUE(seq_name, [min_length], [repeat_value])
seq_name:序列名称;
min_length:序列值的最小长度,若未设置,则返回序列原值,若设置序列原值没有最小长度,则会填充补齐到最小长度,若值为正值,则在左侧填充,若为负值,则在右侧填充;
repeat_value:填充值,默认值为0。
3. 示例
3.1 函数使用示例
例如:首选在序列管理创建一个seq1序列,开始值为0,最大值为1000,增加值为1。
SEQUENCE_CURRENT_VALUE("seq1") ,生成的值为 0
SEQUENCE_CURRENT_VALUE("seq1",3),生成的值为 000
SEQUENCE_CURRENT_VALUE("seq1",3,"a"),生成的值为 aa0
SEQUENCE_CURRENT_VALUE("seq1",-3,"a"),生成的值为 0aa
SEQUENCE_NEXT_VALUE("seq1") ,生成的值为 0
SEQUENCE_NEXT_VALUE("seq1",3),生成的值为 000
SEQUENCE_NEXT_VALUE("seq1",3,"a"),生成的值为 aa0
SEQUENCE_NEXT_VALUE("seq1",-3,"a"),生成的值为 0aa
3.2 用于填报生成主键示例
创建一个seq1序列,开始值为0,最大值999999999999999999,增加值为1,禁用循环。
在模板>报表填报属性,增加一个内置 SQL,主键值的函数为SEQUENCE_NEXT_VALUE("seq1") 即可
3.3 时间形式的生成主键示例
若一个业务在一秒内,不超过一万的并发,可以创建一个时间加循环序列的做完主键。
创建一个seq1序列,开始值为0,最大值9999,增加值为1,启用循环。此序列只允许某一张报表使用。
函数内容如下,
CONCATENATE(FORMAT(NOW(),'yyyyMMddHHmmss'),SEQUENCE_NEXT_VALUE("seq1",4))
生成值为 202109260903310013
4. 注意事项
若序列号函数使用错误,则返回-1。
第一次使用SEQUENCE_NEXT_VALU函数,会获取到序列的开始值。
此序列为全局序列,对整个报表服务器来生成序列的,不是针对某一个报表,每次使用SEQUENCE_NEXT_VALU函数都会有新的值,除非勾选了循环和超过最大值,才从开始值生成值。