select XX_seq.nextval from dual
j在业务中有一个需求,要求每次新增一条记录时,要在数据库创建一个对应的表,并且表名后缀为GROUPX,其中X为四位编号,从0001开始,每次创建都加一,这里需要考虑并发创建的情况,解决方案是oracle队列。
oracle队列
是oracle提供的用于产生一系列唯一数字的数据库对象。
- 自动提供唯一的数值
- 共享对象
- 将序列值装入内存可以提高访问效率
- 主要用于提供主键值
创建队列
首先当前用户要有创建序列的权限 create sequence
或 create any sequence
创建一个队列:
1 | CREATE SEQUENCE sequence # 创建序列名称 |
1 | # 创建一个队列,开始值为1、最大值为3、步长为1 |
获取队列的值:
NEXTVAL
返回序列中下一个有效的值,任何用户都可以引用CURRVAL
中存放序列的当前值NEXTVAL
应在CURRVAL
之前指定 ,二者应同时有效
1 | # 先nextval 后 currval,否则报错 |
修改序列的注意事项:
- 必须是序列的拥有者或对序列有
ALTER
权限 - 只有将来的序列值会被改变(未被取出来的)
- 改变序列的初始值只能通过删除序列之后重建序列的方法实现
1 | Alter sequence seqTemp maxvalue 5; |
删除序列:
使用DROP SEQUENCE 语句删除序列
删除之后,序列不能再次被引用
1 | DROP SEQUENCE seqTemp |
回到上述提到的业务场景,表名有了,下一步就是要在后端实现数据库表的创建,只需要在后端执行SQL语句来创建表、生成索引等等即可
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hakurei Reimu!