通过数据库函数生成自定义规则编码

我们在项目中,经常需要将某个字段的值按照一定规则生成,比如订单编号需要包含:时间+地区+产品类别;且不能重复。那么如何生成呢?

下面介绍一种方式:
生成编码由:地区简称+年月+自增序列 组成 ,本文采用的是oracle数据库

1、建一个针对此编码的序列

create sequence OVERSEE_CODE_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 794
increment by 1
nocache;

2、新建一个函数

CREATE OR REPLACE FUNCTION fn_no_make_oversee(v_type VARCHAR2,v_seq_name VARCHAR2,v_date_type VARCHAR2 DEFAULT 'YYYYMMDD')
/*
  * 参数说明:
  * v_type: 编码前缀
  * v_seq_name:序列名称
  */
 RETURN VARCHAR2 IS
  PRAGMA AUTONOMOUS_TRANSACTION;
  v_seq NUMBER;
  v_new_num  VARCHAR2(10); --新编码后五位编号
  v_maked_no VARCHAR2(50); --新编码
  v_date_no  VARCHAR2(20); --当前日期编号
  v_sql      VARCHAR2(4000);
BEGIN
    -- 找出其中最大的
  v_sql := 'SELECT ' || v_seq_name || '.nextval FROM dual';
  EXECUTE IMMEDIATE v_sql
    INTO v_seq;
    -- 将当前日期取出
  v_sql := 'SELECT SUBSTR(TO_CHAR(SYSDATE,'''||v_date_type||'''), 1, 8) AS DATE_NO FROM DUAL';
  EXECUTE IMMEDIATE v_sql
    INTO v_date_no;
  v_new_num := to_char(v_seq);
    -- 填充流水号为五位数
  WHILE length(v_new_num) < 2
  LOOP
    v_new_num := '0' || v_new_num;
  END LOOP;
     /*
      * 如果日期相同或者当前表为空
      * 执行流水号为第一个001
      * 否则将上面计算好的流水号加入到新的流水号里面
      */

  v_maked_no := v_type || v_date_no || v_new_num;
    -- 最后返回新的流水号
  RETURN(v_maked_no);
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(SQLERRM);
    RETURN(NULL);
END fn_no_make_oversee;

3、新建一个存储过程,用于定时任务执行

create or replace procedure seq_reset(v_seqname varchar2)
is
n number(10);
tsql varchar2(100);
begin
tsql := 'select '||v_seqname||'.nextval from dual';
  EXECUTE IMMEDIATE tsql INTO n;
n:=-(n);
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by 1';
execute immediate tsql;
end seq_reset;

4、新建一个定时任务,定时将序列的值还原为开始值,可每天还原到开始值,也可每月
在PL/SQL中左侧找到DBMS_JOBS一栏,点击新建在在这里插入图片描述
在PL/SQL中左侧找到DBMS_JOBS一栏,点击新建
在这里插入图片描述
在what值中填写待执行的存储过程,多个可以,隔开
在间隔中填写执行时间策略;
间隔/interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null时,该job执行结束后,就被从队列中删除。假如我们需要该job周期性地执行,则要用‘sysdate+m’表示。
(1).每分钟执行
Interval => TRUNC(sysdate,‘mi’) + 1/ (24*60)

每小时执行

Interval => TRUNC(sysdate,‘hh’) + 1/ (24)

(2).每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate+ 1) +1/ (24)

(3).每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,‘星期一’))+1/24

(4).每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

(5).每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),‘Q’) + 1/24

(6).每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+1/24

(7).每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+1/24

4、通过SQL获得该自定义编码

SELECT FN_NO_MAKE2('TH','OVERSEE_CODE_SEQ','YYYYMM') CASENO FROM DUAL

备注:TH为地区简称,OVERSEE_CODE_SEQ为序列名称,YYYYMM为年月

最终得到的编码:TH201908815
最后的815是自增序列生成的,序列规则可自定义

说明:此方式只是提供一钟方式,如需扩展可修改参数或者修改存储过程

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 回答:wxacode.getUnlimited函数生成的二维码是根据输入的参数生成的,通常情况下会显示相应的小程序码或者自定义二维码。如果生成的二维码不同于预期的人像或实物,可能是由于参数设置不正确或其他误操作导致的。我们建议您检查输入参数是否正确,或者尝试使用其他方法生成二维码。如果问题依然存在,请联系相关技术人员进行解决。 ### 回答2: wxacode.getUnlimited是微信小程序提供的一个接口,用于生成无限制的小程序码,生成的小程序码可以用于任意场景下的扫码使用。但是该接口生成的小程序码通常是二维码形式的,并不能直接生成非人像现实的图像。 生成的小程序码是由黑白方块组成的二维码,用于识别和扫描小程序的信息。它的主要作用是将小程序的appId、参数等信息编码成二维码的形式,供用户扫码访问小程序。因此,小程序码主要用于实现用户扫码进入小程序的功能。 然而,如果希望生成非人像现实的图像,而不是一个二维码,就需要使用其他工具或技术来实现。例如,可以使用图像处理软件来对二维码进行美化,添加背景、图案或文字等元素,使其更符合个人需求和风格。 当然,微信小程序还提供了其他生成码的接口,如wxacode.get,可以生成一些更具个性化的小程序码,如小程序的小卡片码,这些码相对于普通的二维码更具设计感和美感,但仍然是以二维码的形式进行展现,并不能直接生成非人像现实的图像。 总之,wxacode.getUnlimited生成的二维码主要是用于实现小程序扫码功能,如果希望生成非人像现实的图像,需要使用其他工具或技术。 ### 回答3: wxacode.getUnlimited生成的二维码使用的是小程序码接口,可以生成无限制数量的小程序码。这种小程序码在形式上类似于普通的二维码,但它拥有更多的功能。在使用wxacode.getUnlimited接口生成小程序码时,可以通过配置不同的参数,来实现非人像现实的效果。 首先,可以通过设置参数page来指定小程序的页面路径,从而在生成的小程序码中直接打开特定的页面。这意味着可以通过配置不同的页面路径,来显示小程序中不同的页面内容。这样,生成的小程序码就可以实现非人像现实的效果,例如展示商品、展示活动详情、展示营销页面等。 其次,通过设置参数scene,可以实现在小程序码中传递特定的参数。这样,在小程序中可以根据不同的参数值,显示不同的内容,从而实现非人像现实的效果。例如,可以通过scene参数传递商品ID,然后小程序根据商品ID查询数据库,展示对应的商品详情信息。 此外,可以通过设置参数width和auto_color来实现调整小程序码的大小和颜色。通过调整大小,可以适应不同的场景需求;通过设置自动颜色,可以根据小程序主题自动调整小程序码的颜色,使其与小程序界面保持一致。 总之,wxacode.getUnlimited生成的二维码可以通过配置不同的参数实现非人像现实的效果,在小程序中展示不同的页面内容、传递参数,并且可以调整大小和颜色,以满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值