sql - 将序列值重置为 1

标签 sql oracle csv sql-loader

<分区>

我有 test.csv、test1.csv、test2.csv...等文件。 我正在通过 sql 加载程序将这些文件加载​​到自定义表测试中。 在表测试中,我有名为 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 个文件,则 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 应该重复/文件一样。 现在我正在使用 test1.nextval 那么我如何重置序列 test1 以便对于每个文件 process_id 将从 1 重复到 count(FDETL) 条记录?

最佳答案

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

  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。

关于sql - 将序列值重置为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28963257/

相关文章:

java - JBoss 7.1 - 声明数据源并通过 JNDI 访问

php - 需要适本地在 CSV 中标题标题,而不是使用表列标题

sql - 使用 Groovy SQL 计算受影响的行数

xml - PLSQL XMLTable XPath 获取最深深度的所有标签

Java 和数据库 : on using multiple ResultSets and Cursors

csv - 在 WSO2 Integration Studio 中读取 .txt 文件

PHP。将下载的 csv 传输到 mysql 数据库 - 如何将下载的 csv 文件存储在 php 内存中

c# - 如何使用 EF Code First 有效地初始化大型种子?

java - DB中的记录不是一条一条的。 hibernate

sql - 构建结构然后填充查询中的值?