问题描述
嗨,康纳/克里斯,
我写了一个存储过程逻辑,它首先使用批量限制将数据插入表中,然后对于序列号,我们使用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开始序列是不可能的。
有什么方法可以在批量插入本身中创建这样的设置?
我写了一个存储过程逻辑,它首先使用批量限制将数据插入表中,然后对于序列号,我们使用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 * 日期 * 列。
看起来像: “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 * 日期 * 列。