获取当前编号,这种方法可行吗???

班门弄斧 2011-04-12 02:20:04
系统角色表(sys_role):
role_no char(4)
role_name varchar2(20)
role_desc varchar2(20)

公共流水表(pub_seq_g):
table_name varchar2(30)(表名称)
field_name varchar2(30)(字段名称)
curr_seq_no varchar2(20)(当前最大流水号)

上面有2张表,系统角色表role_no的获取是通过下面的方式来实现的:
获取公共流水表当前最大流水号,然后加1,然后更新公共流水表的当前最大流水号


请问上面的方式会不会引起什么问题?会不会引起重号的可能。
...全文
105 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolkisses 2011-04-14
  • 打赏
  • 举报
回复
上面已经说的很清楚了,设计存在缺陷。
sequence 已经可以满足要求。
Laughing 2011-04-14
  • 打赏
  • 举报
回复
先+1,再使用,没问题
  • 打赏
  • 举报
回复
没必要这样创建流水号吧,干嘛不直接使用序列sequence
xiaoyaobihai 2011-04-14
  • 打赏
  • 举报
回复
sequence,很好的。
fafi09 2011-04-13
  • 打赏
  • 举报
回复
建议用sequence,要不事务并发可能出现问题
hanks_gao 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jsnt_rd 的回复:]

我在向系统角色表(sys_role)加入一条记录的时候,先到公共流水表(pub_seq_g)中获取相应的最大号(楼主在这里加这么一段 : DBMS_LOCK.SLEEP (10000);
然后快速连续插入多条数据,看结果是什么?
)
,然后更新公共流水表(pub_seq_g),插入系统角色表
[/Quote]

建议用Sequence!
班门弄斧 2011-04-12
  • 打赏
  • 举报
回复
我在向系统角色表(sys_role)加入一条记录的时候,先到公共流水表(pub_seq_g)中获取相应的最大号,然后更新公共流水表(pub_seq_g),插入系统角色表
luoyoumou 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 jsnt_rd 的回复:]
系统角色表(sys_role):
role_no char(4)
role_name varchar2(20)
role_desc varchar2(20)

公共流水表(pub_seq_g):
table_name varchar2(30)(表名称)
field_name varchar2(30)(字段名称)
curr_seq_no varchar2(20)(……
[/Quote]

-- 不多说,一句话:这是非常糟糕的设计!
pigengler 2011-04-12
  • 打赏
  • 举报
回复
对 这种情况 应该用 序列 sequence
cuisea 2011-04-12
  • 打赏
  • 举报
回复
没必要这样创建流水号吧,干嘛不直接使用序列sequence
horizonlyhw 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 jsnt_rd 的回复:]
系统角色表(sys_role):
role_no char(4)
role_name varchar2(20)
role_desc varchar2(20)

公共流水表(pub_seq_g):
table_name varchar2(30)(表名称)
field_name varchar2(30)(字段名称)
curr_seq_no varchar2(20)(当前最大流水号)
……
[/Quote]

如果不做其他处理 肯定会出现“重号”

如果性能可以 可以考虑 for update
  • 打赏
  • 举报
回复
获取公共流水表当前最大流水号,然后加1,然后更新公共流水表的当前最大流水号
--怎么个更新法? 原始的数据又是怎么来的?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧