Sql 将序列值重置为1

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

我有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 ;  

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上有一个问题。您可以通过以下步骤执行此操作:

  • 找出序列的当前值
  • 将序列更改为按步骤1中序列的当前值返回的负值递增
  • 现在序列被重置为0
  • 将序列更改为递增1
  • 现在序列设置为1
  • 注:以下示例仅适用于使用序列的唯一过程。否则,其他用户将获得ORA-08004:sequence S.NEXTVAL低于MINVALUE,并且在您将sequence increment设置回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。

    这不是序列的用途,但您可以将其更改为重置。如果这是您使用该序列的唯一位置,您可以简单地将其删除并重新创建。更改序列并按负增量重置。但是,您需要确保当时没有其他用户在使用该序列。看看我的答案。