暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 具有唯一序列号国家/地区的批量插入

askTom 2017-06-29
138

问题描述

嗨,康纳/克里斯,

我写了一个存储过程逻辑,它首先使用批量限制将数据插入表中,然后对于序列号,我们使用ROWNUM来获得统一序列:

N _ 卡 _ 行计数: = 0;
循环
将ref_cur批量收集到tb_stmt_data限制5000中;
当tb_stmt_data.COUNT = 0时退出;
FORALL i IN 1 ..tb_stmt_data.COUNT
插入tb_1
(emp_no,end_date,
..
..
状态,创建 _ 开
)

(
tb_stmt_data(i).emp_no,tb_stmt_data(i).end_date,
“Ac”,系统日期
);
N _ 卡 _ 行计数: = SQL % 行计数;

提交;

结束循环;

/*
对于stmt_created_on,country_code,is_logger的每种组合,我们需要序列号,它将以2017290600000001开头。2017290600000099 ..等等
*/
如果n _ 卡 _ 行计数 <> 0
然后
更新tb_1
设置序列 _ no = TO_CHAR(d_stmt_date,'YYYYMMDD')| | LPAD(ROWNUM,8,0)
其中stmt_created_on = TO_DATE(in_stmt_created_on,'MM/DD/yyy')
和country_code = in_country
-- 和region = in_region
和is_logger = 'N';

提交;
如果结束;

我想到了创建序列,但是由于此过程将同时为多个国家执行,并且对于每个国家/地区,从2017290600000001开始序列是不可能的。
有什么方法可以在批量插入本身中创建这样的设置?

专家解答

我将猜测这里的一个基本问题。

看起来像: “2017290600000001” 的序列

在我看来,就像一个约会和一个数字,拼凑在一起是一个 “顺序”。他们是那种总是最终成为麻烦的事情,因为接下来你知道,人们正在编写SQL查询:

“今天给我的客户”

作为

其中2017072900000和2017072999999之间的seq

或者更糟糕的是,像这样的事情:

select to_char(substr(seq,1,8)) 作为 customer_date

etc etc...ie, its no longer a sequence, it h作为 morphed into several attributes cobbled into a single column.


如果你想要一个真实的序列号... 我们正好有这个问题。'创建序列'

如果您想知道加载数据的日期,我们也有。A * 日期 * 列。