Oracle数据库自定义函数---根据公司流程自动生成流程编号


--假如我自定义的编号为 BAIQRSH07+日期+001
--例如BAIQRSH072014001、 BAIQRSH072014002、
--每年都是从001开始 如 BAIQRSH072015001

CREATE OR REPLACE FUNCTION GetFlowNumber
RETURN VARCHAR2
AS
serialNumber NUMBER(16);--序列号 自定义编号最后3位数
flowNumber VARCHAR2(50);--返回流程编号 BAIQRSH07+日期+XXX
flowNum VARCHAR2(50);--自定义编号 BAIQRSH07+日期
BEGIN
flowNum := 'BAIQRSH07'|| TO_CHAR(SYSDATE, 'YYYY');
--模糊查找数据库当前最大的编号 即最后面3位数 然后查询出来的 赋值给serialNumber
--max 是Oracle的一个函数,这里用于获取 该表中最大的编号
--substr 是Oracle的一个函数,这里用于截取 自定义编号,就是获取 BAIQRSH07+日期 后面的数
--nvl 是Oracle的一个函数,这里用于判断 为空时,赋值为0
--to_number 是Oracle的一个函数,把字符改成数字
--因为字符比较时 999会大于1000 所以先转为数字,再比较大小

select nvl(max(to_number(substr(flow_num,14))),0) into serialNumber from FlowTable t where t.flow_num like flowNum||'%';
--这里就是用于累加的
serialNumber :=serialNumber+1;
if serialNumber<100 then--如果小于100
--LPAD是是Oracle的一个函数,lpad(字段名,填充长度,填充的字符) 当序列号 不足3位时 自动填充0,例如 你序列号位1,不满足3位,怎会为001
flowNumber := flowNum || LPAD(serialNumber, 3, '0');--左边添加自动补0,直到达到3位数
else
flowNumber := flowNum || serialNumber;
end if;
RETURN flowNumber;
END;



后台获取自定义编号
根据下面这条 SQL 语句就可以获取到自动生成的编号了。 后台自己写


String sql = "SELECT GetFlowNumber() flowNumber FROM DUAL";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值