日期:2014-05-16  浏览次数:20792 次

如何生成一个有格式的流水号
比如登记一个商品的信息, 
在oracle表中有个INFO表与它对应,要求程序登记界面有个框是显示 这个商品今天的流水号,比如如果是今天第一个商品,那就是2012-08-29-00001。

如果有几台电脑一起登记的话,那其它电脑就分别显示2012-08-29-00002 ,2012-08-29-00003 ,2012-08-29-00004 等等,
问题还主要在于这个流水号不能中断,也不能重复。

请问各位大侠这个问题如何解决。十分万分感激你们的回复!请赐教!

------解决方案--------------------
你的这个想法就有问题。第一:如果我三台电脑同时录入信息,而系统自动给三台电脑分配了一个ID,然后有两台电脑退出了录入界面。只有第三台录入了信息。那请问这个ID怎么传?
第二:序列号不能重复,如果录入了一条信息,后来我觉得这条信息没有用,我把这条信息给删除了。那这样的情况怎么处理?
像这种ID的我们一般是这样处理,在点击新增按钮之后。调用一个存储过程,这个存储过程做两件事,第一:获取当前表中的最大的ID,在原来的基础上加1,第二:把传进来的参数一一对应到表字段进行新增。
------解决方案--------------------
id 设成Primary Key 效果(not null 、唯一)
每次记录的时候取当天最大后缀,然后+1
SQL code
with tb(id) as
(select '2012-08-29-00001'  from dual union all
select '2012-08-29-00002'  from dual union all
select '2012-08-29-00003' from dual union all
select '2012-08-29-00004' from dual)
select to_char(sysdate,'YYYY-MM-DD')||'-'||lpad(nvl(max(substr(id,12)),0)+1,5,'0')
from tb where substr(id,0,10)=to_char(sysdate,'YYYY-MM-DD')