我有 test.csv、test1.csv、test2.csv...等文件。
我正在通过 sql 加载程序将这些文件加载到自定义表测试中。
在表测试中,我有名为 seq_no,process_id 的列,除了来自上面提到的平面文件的列。
我为上面提到的两列创建了两个序列,如下所述。
CREATE SEQUENCE test
MINVALUE 1
INCREMENT BY 1
START WITH 1
NOCACHE
NOORDER
NOCYCLE ;
和
CREATE SEQUENCE test1
MINVALUE 1
INCREMENT BY 1
START WITH 1
NOCACHE
NOORDER
NOCYCLE ;
现在,seq_no 将根据加载的文件数量进行填充
例如:如果 v 有 5 个文件,则 seq_no 将为 1,2,3,4,5
并且 process_id 将在文件内部有多少“FDETL”记录
例如,如果 v 有文件 1,FDETL=2 那么 seq_no=1,process_id=1,2
如果 v 有文件 2,FDETL=3 则 seq_no=2,process_id=1,2,3。
就像 process_id 应该重复/文件一样。
现在我正在使用 test1.nextval
那么我如何重置序列 test1 以便对于每个文件 process_id 将从 1 重复到 count(FDETL) 条记录?
没有直接的方法可以做到这一点。您需要对其进行编码或手动执行,以便每次特定进程结束时序列都从 1 开始。有一个 similar question在 AskTom 上。您可以按照以下步骤进行操作:
- 找出序列的当前值。
- 改变序列以增加步骤 1 中序列的当前值所返回的负值。
- 现在序列重置为 0。
- 改变序列以增加 1。
- 现在序列设置为 1。
注意:以下示例仅在这是使用该序列的唯一进程时才适用。否则,其他用户将收到 ORA-08004: sequence S.NEXTVAL goes below MINVALUE and cannot be instantiated 错误,直到您将序列增量设置回 1。
例如,
SQL> create sequence s;
Sequence created.
SQL> select s.nextval from user_objects;
NEXTVAL
----------
1
2
3
4
5
6
7
8
9
10
11
12
12 rows selected.
SQL> select s.nextval from dual;
NEXTVAL
----------
13
让我们将它增加-13,
SQL> alter sequence s increment by -13 minvalue 0;
Sequence altered.
SQL> select s.nextval from dual;
NEXTVAL
----------
0
SQL> alter sequence s increment by 1;
Sequence altered.
SQL> select s.nextval from dual;
NEXTVAL
----------
1
SQL>
序列现在重置为 1。