DB2唯一流水号生成

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 13:00 点击:

DB2唯一流水号生成
 
最近开发的系统要求生成很多唯一的单证号,单证号的规则  前缀_yyyyMMdd+顺序号,如 P_201210160001, P_201210160002。
 
因为生成多种的单证号。于是在系统中建了一个单证号种子表BAS_SEQ_SEED
www.2cto.com  
ID (PK)
主键ID
BIGINT
NET_ID
网络ID
BIGINT
COMP_ID
加盟公司ID
BIGINT
SEED_TYPE
种子类型
SMALLINT
SEED_DATE
日期
VARCHAR(16)
SEED_VALUE
种子值
SMALLINT
SEED_PREFIX
种子前缀
VARCHAR(6)
SEED_SPLIT
种子分隔符
VARCHAR(2)
CREATE_TIME
 
VARCHAR(19)
 
其中NET_ID、COMP_ID、SEED_TYPE建立一个唯一索引
www.2cto.com  
生成的单证号有存储过程来实现
 
Sql代码  
drop PROCEDURE PROC_SEQ_SEED_GET  
select * FROM BAS_SEQ_SEED  
CREATE PROCEDURE PROC_SEQ_SEED_GET  
( IN net_id_in bigint,   --网络ID  
  IN comp_id_in bigint,  --加盟公司ID  
  IN seed_type_in integer,--序列号类型  
  IN seed_date_in VARCHAR(16),--当前日期yyyymmdd格式  
  OUT return_value VARCHAR(32) --返回值  
)   
P1: BEGIN    
  DECLARE seed_value_t integer;  
  DECLARE seed_date_t varchar(16);  
  DECLARE return_value_t integer DEFAULT 1;   
    
  DECLARE rs1 CURSOR WITH RETURN FOR  
  select SEED_VALUE,SEED_DATE FROM BAS_SEQ_SEED as t where t.NET_ID=net_id_in and t.COMP_ID=comp_id_in and t.SEED_TYPE=seed_type_in for update;  
  OPEN rs1;  
  FETCH  rs1 into seed_value_t ,seed_date_t;  
    
  IF (seed_value_t is null) then --表记录不存在  
    begin  
           
      insert INTO BAS_SEQ_SEED(ID,NET_ID,COMP_ID,SEED_TYPE,SEED_DATE,SEED_VALUE)  
     VALUES  
     (NEXTVAL FOR SE_EXPRESSBAS,net_id_in,comp_id_in,seed_type_in,seed_date_in,1);  
    commit;  
    SET return_value_t = 1;      
    end;   
 else  
    begin   
       --set seed_date_in=  SCM_WULIU.ts_fmt(current timestamp,'yyyymmdd');  
       if(seed_date_in=seed_date_t) then  --当天  
       begin  
          update BAS_SEQ_SEED set SEED_VALUE=SEED_VALUE+1 where NET_ID=net_id_in and COMP_ID=comp_id_in and SEED_TYPE=seed_type_in;  
          SET return_value_t = seed_value_t+1;  
       end;  
     else     --非当天  
        begin  
           update BAS_SEQ_SEED set SEED_DATE=seed_date_in,SEED_VALUE=1 where NET_ID=net_id_in and COMP_ID=comp_id_in and SEED_TYPE=seed_type_in;  
           SET return_value_t = 1;  
         end;  
       end if;  
     end;   
  end if;  
     if(return_value_t<10) then  
       

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • db2管理工具小结
      • DB2数据库的导出与导入(Windows客户端)
      • db2 CLP中如何换行
      • DB2查看表结构及所用表语句
      • DB2 · CREATE TABLESPACE
      • 使用DB2对象:创建模式、表和视图
      • DB2数据库逻辑卷的复制
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1