日期:2014-05-16 浏览次数:20431 次
--假如我自定义的编号为 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;
String sql = "SELECT GetFlowNumber() flowNumber FROM DUAL";