oracle实现自定义序列号生成的方法

oracle实现自定义序列号生成的方法
在实际工作中,序列号生成问题是不可避免的,下面是一个简单的序列号生成函数。

(1)创建自定义序列号配置表,如下所示:
-自定义序列
创建表s_autocode

PK1 VARCHAR2(32)主键,
使用VARCHAR2(20)不为空,
VARCHAR2(10)不为空的主人,
Initcycle CHAR(1)不为空,
cur_sernum VARCHAR2(50)不为空,
zero_flg varchar(2)不为空,
sequencestyle VARCHAR2(50),
备忘录VARCHAR2(60)
);
向列添加注释
柱上s_autocode.pk1评论是关键;
柱上s_autocode.atype评论是序列号型;
柱上s_autocode.owner评论序列号业主;
柱上s_autocode.initcycle评论的序列数的增加;
柱上s_autocode.cur_sernum评论是序列号;
柱上s_autocode.zero_flg评论是序列号长度;
柱上s_autocode.sequencestyle评论是序列号风格;
柱上s_autocode.memo评论注释;
-创建/重新创建索引
创建s_autocode指数(一种pk_s_autocode,所有者);
(2)初始化配置表,例如:

复制代码如下:插入s_autocode(PK1,ATYPE,老板,initcycle,cur_sernum,zero_flg,sequencestyle,备忘录)

值('0a772aedfbed4feea46442003ce1c6a6 ','zdbcontcn ','012805',‘1','200000',7'、'$年$年orgapp美元美元美元美元质量词辑,质押合同中国号)。
(3)自定义序列号生成函数:

创建一个功能:sf_sys_gen_autocode

创建或替换功能sf_sys_gen_autocode(
i_atype在VARCHAR2 / * * /序列分类
i_owner在VARCHAR2 / * * /所有者序列
返回VARCHAR2是)
************************************************************************************************** / /
方法:sf_sys_gen_autocode名称 / * * /
发展:wangxf / * * /
*描述:主要用于生成自定义序列号。
发展:2016-10-08日期 / * * /
通过以下方式检查: *
负荷的方法:f1-delete插入 / * * /
************************************************************************************************** / /

o_autocode VARCHAR2(100); / * * /输出序列号
v_initcycle s_autocode。initcycle %型; / * * /序列号递增
v_cur_sernum s_autocode。cur_sernum %型; / * * /序列号
v_zero_flag s_autocode。zero_flg %型; / * * /编号长度
v_sequencestyle s_autocode。sequencestyle %型; / * * /编号样式
v_seq_num VARCHAR2(100); / * * /序号
v_date_year char(4); / *年,如2016× /
v_date_year_month char(6); / *个月的一年,如201610× /
v_date_date char(8); / *月的一年,如20161008× /
v_date_date_all char(14); / *全年序列,如20161008155732× /

*
支持参数序列:
年/年/年
year_month美元美元/年+月,没有人
美元/年+月+日期,没有人
date_all美元美元——>完整日期,没有人
orgapp美元美元/人
当前序列号
* /

解决查询交易无法执行DML的问题
语用autonomous_transaction;
开始
查询复核条件的序列号的配置
选择T.INITCYCLE,
t.cur_sernum,
t.zero_flg,
t.sequencestyle
为v_initcycle,v_cur_sernum,v_zero_flag,v_sequencestyle
从s_autocode T在t.atype = i_atype和t.owner = i_owner;

-格式化当前日期
选择
to_char(SYSDATE,'yyyy),
to_char(SYSDATE,'yyyymm),
to_char(SYSDATE,'yyyymmdd),
to_char(SYSDATE,'yyyymmddhh24miss)
为v_date_year,v_date_year_month,v_date_date,v_date_date_all
从双;

-数据处理
o_autocode:=(v_sequencestyle取代美元,美元,v_date_year);
o_autocode:=(o_autocode取代,year_month美元$,v_date_year_month);
o_autocode:=(o_autocode取代美元美元,日期,v_date_date);
o_autocode:=(o_autocode取代,date_all美元$,v_date_date_all);

主处理
o_autocode:=(o_autocode取代,orgapp美元$,i_owner);

序列号处理
v_seq_num:= to_char(to_number(v_cur_sernum)+ to_number(v_initcycle));

-写下当前的序列号,以确保每次都在增加。
更新s_autocode T组t.cur_sernum = v_seq_num哪里t.atype = i_atype和t.owner = i_owner;

-前面的补丁长度不满足0。
如果长度(v_seq_num)< to_number(v_zero_flag)
然后
*

v_seq_num:= 0| | v_seq_num;
退出时的长度(v_seq_num)= to_number(v_zero_flag);
结束循环;
* /
v_seq_num:=负载(v_seq_num,to_number(v_zero_flag),'0');
最后如果;

o_autocode:=(o_autocode取代美元美元,SER,v_seq_num);

承诺;
返回o_autocode;
例外
-如果没有相应的配置项,返回错误值
当no_data_found然后
回降;
dbms_output.put_line(没有配置你的需要…;
return'error;
最后sf_sys_gen_autocode;
(4)试验:

配置项:$年$ orgapp美元美元美元字号服务质量

复制代码代码如下:选择sf_sys_gen_autocode('zdbcontcn ','012805)从双;
(5)结果

2016 012805字符数字0200001

以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。

tag:自定义方法序列号电脑软件Oracle

相关内容