表单号的生成解决方案 我们经常需要生成一个和表单号 ‘表单前缀’+’日期简码’+’流水号’,
这里提供一个我常用的简单的方法,希望对大家有帮助,
主要思路:建立一个序号的表,记录每种类型表单的序号数据,
基于Oracle DB.
1。建立序号表 SEQUENCEDATA
1 2 3 4 5 6 7 |
create table SEQUENCEDATA ( CODE NVARCHAR2(20) not null, ABB NVARCHAR2(2) not null, SEQ NUMBER default 1 not null, TODAY NVARCHAR2(10) not null ) |
2。建立PROCEDURE paperno
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
CREATE OR REPLACE PROCEDURE paperno(p_code IN NVARCHAR2, o_no OUT NVARCHAR2) AS --Create by cpp,20161227 --生成Paper单号,如果是今天的日期,则获取PaperNo ,然后序号+1,否则更新序号的表 v_today VARCHAR2(10); BEGIN --执行语句段 select today into v_today from sequencedata where CODE=p_code; if v_today<>to_char(sysdate,'yyyy-mm-dd') then update sequencedata set TODAY=to_char(sysdate,'yyyy-mm-dd'),SEQ=1 where CODE=p_code; end if; select ABB || substr(replace(today,'-',''),3,6) || replace(lpad(SEQ,3),' ','0') ABB into o_no from sequencedata where CODE=p_code; update sequencedata set SEQ=SEQ+1 where CODE=p_code; dbms_output.put_line(o_no); commit; EXCEPTION --异常处理语句段 WHEN OTHERS THEN rollback; END; |
测试的结果如下图