免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5030 | 回复: 6
打印 上一主题 下一主题

ORACLE中如何实现这样的流水号? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-05 09:12 |只看该作者 |倒序浏览
应用是一个仓库管理,包括多个仓库和多个出库类型。
出库单号的格式是YYYYMMDD+0000,后面4位是流水号,每天从0001开始。
每个仓库的每种出库类型都单独编号,即一天会有N个200806050001这个编码生成,
N最大=仓库数×出库类型数。

考虑的一种实现是做一个流水号表。
create table LSH
(
   仓库ID  number(5),
   出库类型  number(5),
   日期      date,
   流水号   varchar(20),
   primary key(仓库ID,出库类型)
)

然后生成ID时,
1)先
select *
   from LSH
where 仓库ID = ?
    and 出库类型 = ?
    for update
锁定对应的行
2)检查是否是新的一天,需要重新复位流水号?或者是直接将流水号 + 1.
3)commit,并返回流水号

但是这种方式中,LSH的生成将成为瓶颈。
想请教大家,有没有更加好的实现方式?谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-06-06 08:19 |只看该作者
  没有兄弟给些建议吗?

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
3 [报告]
发表于 2008-06-06 08:51 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2008-06-06 12:00 |只看该作者
原帖由 ILoveMK 于 2008-6-6 08:51 发表
每种出库类型使用一个序列,然后用触发器来实现。


某个出库类型在各个仓库间的流水号是分别做流水的,这样就需要总数 = 仓库数×出库类型数 的序列。
感觉比较麻烦,加仓库的同时,还需要去加序列。

论坛徽章:
0
5 [报告]
发表于 2008-06-07 16:46 |只看该作者
原帖由 vct00 于 2008-6-6 12:00 发表


某个出库类型在各个仓库间的流水号是分别做流水的,这样就需要总数 = 仓库数×出库类型数 的序列。
感觉比较麻烦,加仓库的同时,还需要去加序列。


加库的同时去增加序列,这个工作可以在程序中完成,先不讨论这个问题,我觉得你自己的方法也是很可行的,但有些地方需要注意。

一起探讨。

从你的sql语句来看,很显然你是把table LSH 做成最后一条流水纪录号的存储表,频繁做UPDATE。
这样的话,我认为
1,DATA可有可无,
2,检查新的一天工作不该再这个时候做。只需要直接对应类型+1就可以了。
3,  流水复位的工作放在"日结"工作中,增加记账日期这样的概念。
     这样的好处是同一天可以处理不同日期的帐务,实际应用中这种事情可能不会少。
4,那么如果3满足,提交各种出库的单据纪录,则可以存储在小型的日数据纪录表中,
     天长日久数据多了,这种日数据表就能显示出它的效率优点了。
5,日数据在做"日结"类型的操作时候,INSERT入完整的历史表,之后TRUNCATE 日数据表,
      如果用DELETE日子久了水位线也会不断增高,记得收回就可以了。


个人见解,欢迎讨论。

论坛徽章:
0
6 [报告]
发表于 2008-06-08 10:21 |只看该作者
原帖由 feijin 于 2008-6-7 16:46 发表


加库的同时去增加序列,这个工作可以在程序中完成,先不讨论这个问题,我觉得你自己的方法也是很可行的,但有些地方需要注意。

一起探讨。

从你的sql语句来看,很显然你是把table LSH 做成最后一条流 ...



认真学习了,非常感谢!

论坛徽章:
0
7 [报告]
发表于 2008-06-10 10:14 |只看该作者

回复 #6 vct00 的帖子

不客气,这里高手很多,我说的也许并不是最好的办法
大家都可以说说
我说的不对的地方也欢迎指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP