您的位置:首页 > 数据库 > Oracle

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

2014-04-22 14:42 253 查看

--假如我自定义的编号为 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";

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: