日期:2014-05-16  浏览次数:20431 次

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
 select nvl(substr(max(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";