有没有让生成器根据日期重新设置为零的办法?

罗杰斯 2003-08-30 04:05:49
我用生成器来实现操作编码的时候遇到一个问题,ID编号是按yyyymmdd + 生成器编号来产生的,我想实现每天这个生成器都能从零开始计数,也就是判断到是新的一天了,就重新开始计数,如何做到?
...全文
41 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuperTitan001 2003-09-11
  • 打赏
  • 举报
回复
TR@SOE() :

老大,你又玩我,呵呵!
不过不能修改GENERATOR当前值,可以删除然后重建,这样应该可以吧。
TR@SOE 2003-09-11
  • 打赏
  • 举报
回复
这个,,,,这个,,,,supertitan!!偶服了U!可以try一下,会不会出现记忆效应?值得研究?
shenzhensoft 2003-09-10
  • 打赏
  • 举报
回复
哈,ESSENCE_JN(BCB爱好者) 你是 抽烟的鱼o0O 吧? :)
SuperTitan001 2003-09-10
  • 打赏
  • 举报
回复
TR@SOE() :

pfpf!
我怎么没有想到直接更新系统表。
TR@SOE 2003-09-10
  • 打赏
  • 举报
回复
怎么这个问题在这里又出现了?

解决思路如下:

select max (id) as maxid;
select substr (maxid, 0,8) as maxdate;
select cast(current_date as char(10)) as curdate;

if(curdate>maxdate)
maxdate=curdate;
update rdb$generators set rdb$generatorxxxx=0 where rdb$generator_name = '...';
end if

next_id=gen_id(..., 1);

id=maxdate || '-' || cast (next_id as char (3));

大概就是这样了。

由于你在SP不能直接用SET GENERATOR,所以我们可以直接更新系统表。
TR@SOE 2003-09-10
  • 打赏
  • 举报
回复
我靠!我刚看了一下,,,,,,,RDB$generators表里没有记录GENERATOR当前值!!!!
罗杰斯 2003-09-10
  • 打赏
  • 举报
回复
呵呵,TR老大,我的这个问题是同时在多个地方发的
罗杰斯 2003-09-09
  • 打赏
  • 举报
回复
我要实现的功能是根据当前系统日期来生成一个单号(主键、自动生成)比如:20030909-10,这样表示今天的第十号单据,
我想到了10号的时候这个单号前面也根绝日期来变化,Generators也能根据新日期来归零,单号变成:20030910-1,这种形式。
=========================================================
我创建了如下Procedures来实现日期单号:
CREATE PROCEDURE AUTO_ID
RETURNS (
ID VARCHAR(15))
AS
BEGIN
ID = cast(extract(year from current_date)*10000+extract(month from current_date)*100+extract(day from current_date) as char(8))||'-'||CAST(GEN_ID(GET_ID,1) AS VARCHAR(10));
suspend;
end
==========================================================
我的问题是如何到了10号的时候让Generators自动归零呢?我试了插入记录的时候检测这个值,可感觉效率不高,有更好的办法完成吗?
谢谢了!
罗杰斯 2003-09-02
  • 打赏
  • 举报
回复
刚才写错了,是效率总感觉不高
罗杰斯 2003-09-02
  • 打赏
  • 举报
回复
这个办法我试过了,单效率总感觉高,要每次插入数据的时候都要进行判断,各位还有没有更好的办法解决?
tchatcha 2003-09-02
  • 打赏
  • 举报
回复
upupup
SuperTitan001 2003-09-01
  • 打赏
  • 举报
回复
set generator可以给生成器编号重新赋值。
不过interbase的存储过程无法调用set generator,所以判断新的一天并调用set generator应该只能在高级语言中完成。
  • 打赏
  • 举报
回复
我出个馊主意,就是在一个表里保存一个日期和这个日期的第一个 generator 号码,
每次调用这个存储过程时判断日期变化就保存这个日期和 generator 号码,
然后返回值是当前生成的 generator 减去 保存的 generator 号码,再在前面加上 yyyymmdd
klbt 2003-08-30
  • 打赏
  • 举报
回复
学习。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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