Sql 将序列值重置为1
我有test.csv、test1.csv、test2.csv等文件。 我正在通过sql加载器将这些文件加载到自定义表test中。 在表test中,除了上面提到的平面文件中的coimng列之外,还有名为seq_no、process_id的列。 我为上面两列创建了两个序列,如下所述Sql 将序列值重置为1,sql,oracle,csv,sql-loader,Sql,Oracle,Csv,Sql Loader,我有test.csv、test1.csv、test2.csv等文件。 我正在通过sql加载器将这些文件加载到自定义表test中。 在表test中,除了上面提到的平面文件中的coimng列之外,还有名为seq_no、process_id的列。 我为上面两列创建了两个序列,如下所述 CREATE SEQUENCE test MINVALUE 1 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE ; 及 CREA
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个文件,那么序号将是1,2,3,4,5
进程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。
它类似于进程id应该重复/file。
现在我正在使用test1.nextval
那么,我如何重置序列test1,以便每个文件的进程id将从1重复计数(FDETL)记录呢?没有直接的方法。您需要对其进行编码或手动执行,以便每次特定进程结束时,序列都是从1开始的rest。在AskTom上有一个问题。您可以通过以下步骤执行此操作:
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。这不是序列的用途,但您可以将其更改为重置。如果这是您使用该序列的唯一位置,您可以简单地将其删除并重新创建。更改序列并按负增量重置。但是,您需要确保当时没有其他用户在使用该序列。看看我的答案。