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