oracle生成单据号
--创建单据号存放表
CREATE TABLE BU_TAB(
DOC_NUM NUMBER --生成的单据号
);
--单据号
create table cux_doc_num(
tab varchar2(40), --表名
col varchar2(80), --列明
prefix varchar2(20), --前缀
sequence number --序号
);
--记得创建索引
create index cux_doc_num_u1 on cux_doc_num(tab,col,prefix);
--单据号返回函数
create or replace function get_doc_num(p_tab in varchar, --表名
p_col in varchar, --列名
p_prefix in varchar --前缀
--,seq_len in integer defatlt 3,
--,break_num_reuse varchar2 default 'N' --字符型入能,默认'N',指出是否对断号进行重用,默认不重用
)
return varchar is --返回的单据号
pragma autonomous_transaction;
--v_result varchar2(200);
n_sequence number;
c_sequence number;
l_count number;
--l_min_max varchar2(3);
v_sql varchar2(4000) := 'select nvl(max(tab.row_num),1) from (select rownum row_num from dual connect by rownum <=';
begin
--if break_num_reuse = 'Y' THEN
-- l_min_max : 'min';
--else
-- l_min_max : 'max';
--end if;
select count(*),nvl(min(sequence),0)+1 --min可以换成l_min_max
into l_count,n_sequence
from cux_doc_num ccs
where ccs.tab = p_tab
and ccs.col = p_col
and ccs.prefix = p_prefix;
dbms_output.put_line('l_count:'||l_count||'n_sequence:'||n_sequence);
if l_count = 0 then
insert into cux_doc_num
(tab,col,prefix,sequence)
values
(p_tab,p_col,p_prefix,1);
end if;
v_sql := v_sql || n_sequence || ') tab where not exists (select 1 from ' ||
p_tab || ' t where to_number(substr(t.'||p_col||',length('''||p_prefix
||''')+1,20)) = tab.row_num'||
' and substr(t.' || p_col ||',1,length('''||p_prefix||'''))='''||p_prefix||''')';
dbms_output.put_line(v_sql);
execute immediate v_sql into c_sequence;
dbms_output.put_line('c_sequence:'||c_sequence);
if c_sequence = n_sequence then
update cux_doc_num ccs
set ccs.sequence = n_sequence
where ccs.tab = p_tab
and ccs.col = p_col
and ccs.prefix = p_prefix;
end if;
commit;
return p_prefix || lpad(to_char(c_sequence),10,''); --seq_len可以替代10,实现设置长度
end get_doc_num;
oracle生成单据号的更多相关文章
- MySQL生成-单据号不重复
需求生成一个单据编号 单据编号结构: “单据类型” + “日期” + “流水号” 例子 : GD201605230000007 代码: DELIMITER $$ CREATE PROCEDURE `y ...
- sql getdate()生成单据号
select replace( replace( replace( replace(convert(varchar(23),getdate(),121),'-',''),':',''),' ','') ...
- .NET 6 在小并发下如何生成唯一单据号
一.场景介绍 小并发下要解决生成单据号的问题,会碰到哪些问题呢?,接下来让我们一探究竟[这是小并发的解决方案,大家有更好的做好可以一起讨论分享]. 之所以叫小并发:是因为确实是小并发场景的应用模式,一 ...
- 用SQL存储过程生成唯一单据号
用SQL存储过程生成唯一单据号 在一些系统中,经理要生成单据号,为了不使多台客户端生成的单据号重复,一般要在服务端生成这种流水号,本文是在数据库中生成流水号,并且可以生成多种类型的单据号(比如 ...
- Oracle 函数 “自动生成订单号”
create or replace function get_request_code return varchar2 AS --函数的作用:自动生成订单号 v_mca_no mcode_apply_ ...
- 基于mysql的单据号生成(前缀+日期+自增id+后缀)
介绍 本次采用mysql处理,性能不是很好,对于高并发有要求的建议不要采用公司一个小项目,需要生成一个单据号,格式为: 日期 + 每日重新自增号,自己考虑了一下每日自增需要考虑并发和持久问题,两种数据 ...
- GZFramwork数据库层《二》单据表增删改查(自动生成单据号码)
运行效果: 使用代码生成器(GZCodeGenerate)生成tb_EmpLeave的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCodeGe ...
- Oracle生成流水号函数
一.参考 1:日期范围上 smalldatetime的有效时间范围1900/1/1~2079/6/6 datetime的有效时间范围1753/1/1~9999/12/31 2:精准度上 smallda ...
- 【SQL-自动生成编号】按规则自动生成单据编号 以及并发问题_使用触发器、函数 等
描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (ABC1603180001) 方法一:触发器 触发器的缺点是,执行了sql之后才看到编码. 测试:流水号不能超过最大数,否 ...
随机推荐
- Shell中取得文件的最后修改时间
stat -c %y file 取得修改日期 -,-,-
- OpenGL学习笔记0——安装库
最近需要做一个基于Zigbee室内无线定位的系统,受到TI公司ZigBee Sensor Monitor软件的启发,打算用OpenGL来做一个3D显示空间内物体位置的程序.学习阶段选择VS2010+O ...
- Birt导出Excel图片
有一段时间没有使用Birt了,最近突然之间发现新版的Birt可以支持导出Excel附带图片.我目前下载的是Birt 4.3版本的,导出图片的也只能在Excel 2007下面能够实现,2003的xls格 ...
- iOS项目中安装和使用 Cocoapods
1.首先我们要打开我们的终端: 2.在终端输入 这条命令 gem sources -l 2.1如果是和我是一样的显示,则镜像已添加,无需更改,如果不一样,则需要进行更改 这里输出的如果是 https ...
- iOS 设置铃声---加载音乐和音频然后进行播放
在有些应用中需要用到背景音乐和音效,那在程序中是这么实现的. 1.首先加载背景音乐需要用到AVFoundation框架 2.音乐资源都是在包里的,所以需要获得包路径,涉及方法- (id)initWit ...
- hive导入数据
替换分隔符为\ sed -i 's/\t/\x1/g;s/;/\x1/g' test1.txt gz压缩 gzip -r test1.txt 查看文件 hdfs dfs -ls /hive/wareh ...
- JS传参中文乱码
在传参的时候给中文参数加上两个encodeURI即可,类似这样: encodeURI(encodeURI(balanceUnit)) 写法二 escape(encodeURI(tmplItem.hyz ...
- Translucent Bar Android状态栏自定义颜色
Android4.4 一个很重要的改变就是透明系统栏..新的系统栏是渐变透明的, 可以最大限度的允许屏幕显示更多内容, 也可以让系统栏和 Action Bar 融为一体, 仅仅留下最低限度的背景保护以 ...
- Neo4j创建自动索引
一.创建Neo4j的Legacy indexing 1.为节点创建索引 官方API的创建示例为: 将一节点添加至索引: public static void AddNodeIndex(String n ...
- x-ua-compatible的实践
前提: 在ie8中测试 页面头部含有<!DOCTYPE html> 结果: <meta http-equiv="x-ua-compatible" content= ...