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";
相关文章推荐
- 动态SQL根据旧编号自动排序生成有规则的新编号
- php根据数据id自动生成编号的实现方法
- php根据数据id自动生成编号
- C# 根据数据库 自动生成最大编号,应用于各编号的生成
- 根据日期自动生成序列编号
- php根据数据id自动生成编号的实现方法
- 1.15 程序控制自动根据xml生成新表
- Oracle 自动生成编号(实现sqlserver自增长字段)
- Microsoft Dynamics CRM4.0 创建单据的时候,自动生成单据编号的通用方法
- 如何解决用EndNote插入文献时无法自动生成右上角编号(完美解决加截图)
- 分享:根据webservice WSDL地址自动生成java调用代码及JAR包
- 转:邹建--根据当月数据库自动生成下个月数据库--2
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第9版)
- ASP根据数据表结构自动生成数据录入页面
- Flex根据后台的数据自动生成AdvancedDataGrid
- eclipse中的Java文件自动根据svn版本号生成注释
- 根据当月数据库自动生成下个月数据库--2
- 【数据库SQL】自动生成编号功能
- 根据当月数据库自动生成下个月数据库--3