我要求对我在系统中注册的每个客户维护一个数字范围。
用例是客户可以选择他们的起始编号范围和结束编号范围作为用户注册过程的一部分,他们在系统中创建的每个域对象都将使用他们拥有的范围内的自动递增编号创建指定。即现有数字+ 1
还要求一旦该范围内的数字用尽,数字就会开始循环。
他们也可以随时选择改变他们的号码范围。
ie此逻辑似乎非常接近典型的数据库序列,除了客户指定数字范围,即它不是定义的数字范围
我想知道我是否可以动态创建一个序列,也许作为存储过程的一部分,我可以传递一个客户序列名称和数字范围?
答案 0 :(得分:0)
你一定可以动态创建序列:
so=# do 'begin execute ''create sequence a cycle start with 93 maxvalue 94 minvalue 93''; end;';
DO
so=# select nextval('a'), nextval('a'),nextval('a'),nextval('a'),nextval('a');
nextval | nextval | nextval | nextval | nextval
---------+---------+---------+---------+---------
93 | 94 | 93 | 94 | 93
但首先 - 你可以用太多的序列膨胀字典,接下来如果只有用户自己可以旋转这个数字我就不会有任何需要 - 只需使用update blah set num = least(maxnumber,num + 1)
或像它一样使用