CREATE OR REPLACE FUNCTION fn_no_make(v_type VARCHAR2,
v_number_col VARCHAR2,
v_table_name VARCHAR2)
/*
* 参数说明:
* v_type: 编码前缀
* v_number_col:编码所在列名
* v_table_name:编码所在表名
*/
RETURN VARCHAR2 IS
v_old_no VARCHAR2(50); --原编码
v_old_num NUMBER; -- 原编码后五位编号
v_new_num VARCHAR2(10); --新编码后五位编号
v_maked_no VARCHAR2(50); --新编码
v_date_no VARCHAR2(20); --当前日期编号
v_sql VARCHAR2(4000);
BEGIN
-- 找出其中最大的
v_sql := 'SELECT MAX(' || v_number_col || ') FROM ' || v_table_name;
EXECUTE IMMEDIATE v_sql
INTO v_old_no;
-- 将当前日期取出
v_sql := 'SELECT SUBSTR(TO_CHAR(SYSDATE,''YYYYMMDD''), 1, 8) AS DATE_NO FROM DUAL';
EXECUTE IMMEDIATE v_sql
INTO v_date_no;
-- 截取日期和新的日期
v_old_num := to_number(substr(v_old_no, 13, 5));
-- 增加流水号数量
v_new_num := to_char(v_old_num + 1);
-- 填充流水号为五位数
WHILE length(v_new_num) < 5
LOOP
v_new_num := '0' || v_new_num;
END LOOP;
/*
* 如果日期相同或者当前表为空
* 执行流水号为第一个00001
* 否则将上面计算好的流水号加入到新的流水号里面
*/
IF v_old_no IS NULL OR
substr(v_old_no, 4, 8) <> v_date_no
THEN
v_maked_no := v_type || v_date_no || '00001';
ELSE
v_maked_no := v_type || v_date_no || v_new_num;
END IF;
-- 最后返回新的流水号
RETURN(v_maked_no);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END fn_no_make;

INSERT INTO TEST_AA VALUES(sys_guid(),fn_no_make(901,'XSCM_ADDR2','TEST_AA'));

select fn_no_make(901,'XSCM_ADDR2','TEST_AA') from dual

select sys_guid() from dual
select * from xscm_mstr

-- Create table
create table TEST_AA
(
XSCM_ADDR VARCHAR2(80) default ' ' not null,
XSCM_ADDR2 VARCHAR2(80) default ' ' not null
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 128K
next 1M
minextents 1
maxextents unlimited
);
select * from TEST_AA

最新文章

  1. JavaEE开发基础
  2. RapidJSON 代码剖析(二):使用 SSE4.2 优化字符串扫描
  3. Java8-Function使用及Groovy闭包的代码示例
  4. ajaxfileupload asp.net 的简单使用
  5. nodejs学习之表单提交(1)
  6. 操作失败,没有该服务权限![ 机构号:99 ,用户ID:50000009 ,服务号:0101030112 ]
  7. TFS 2010 使用手册(三)权限管理
  8. 微软职位内部推荐-Senior Data Scientist
  9. smali 语法基础
  10. springboot 1.5.2 集成kafka 简单例子
  11. 浙江省新高中信息技术教材,将围绕Python进行并增加编程相关知识点
  12. Vue2.0源码阅读笔记(三):计算属性
  13. centos 下的 clamav 安装使用
  14. Zabbix11.3 Zabbix SNMP 常用OID列表
  15. 2019.03.09 bzoj4491: 我也不知道题目名字是什么(线段树)
  16. Linux ACL 权限之进阶篇
  17. 移动网页广告引入mraid.js使用指南
  18. Solr在Linux中的安装
  19. tcp付金卡黛珊李方军拉萨
  20. Express应用程序目录结构

热门文章

  1. 国内APP漏洞扫描收费情况调查
  2. 一个人开发的.Net版轻量级博客,欢迎吐槽,互相学习!
  3. Oracle Study之--Oracle 11gR2通过RMAN克隆数据库
  4. 箭头函数的 this
  5. 2014年最简单、快捷的美股Scottrade开户攻略
  6. shell 脚本大文件处理
  7. 【OI】向量&amp;矩阵乘法
  8. X86架构下Linux启动过程分析
  9. 虚拟化技术概要之VMM结构
  10. 【转】pycharm常用快捷键