将序列值重置为 1

reset sequence value to 1

我有 test.csv、test1.csv、test2.csv...等文件。 我正在通过 sql 加载器将这些文件加载​​到自定义 table 测试中。 在 table 测试中,除了上面提到的来自平面文件的列之外,我还有名为 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 文件进行填充 例如:如果 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 应该 repeat/file。 现在我正在使用 test1.nextval 那么我如何重置序列 test1 以便每个文件 process_id 将从 1 重复到计数(FDETL)记录?

没有直接的方法。您需要对其进行编码或手动执行,以便每次特定进程结束时序列都从 1 开始。 AskTom 上有一个 similar question。您可以按照以下步骤进行操作:

  1. 找出序列的当前值。
  2. 改变序列以增加步骤 1 中序列的当前值所返回的负值。
  3. 现在序列重置为 0。
  4. 改变序列以增加 1。
  5. 现在序列设置为 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。