将序列值重置为 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 中序列的当前值所返回的负值。
- 现在序列重置为 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。
我有 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 中序列的当前值所返回的负值。
- 现在序列重置为 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。