我有test.csv,test1.csv,test2.csv ...等文件。 我通过sql loader将这些文件加载到自定义表测试中。 在表测试中,我有名为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将被填充,具体取决于加载的no.of文件 E.G:如果v有5个文件,那么seq_no将是1,2,3,4,5 而process_id将在文件内部有多少“FDETL”记录 E.G如果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重复计数(FDETL)记录?
答案 0 :(得分:3)
没有直接的方法可以做到这一点。您需要对其进行编码或手动执行,以便每次特定进程结束时,序列都会从1开始。 AskTom上有一个similar question。您可以按以下步骤执行此操作:
注意:以下示例仅适用于使用序列的唯一过程。否则,其他用户将获得 ORA-08004:序列S.NEXTVAL低于MINVALUE且无法实例化错误,直到您将序列增量设置回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.