【问题标题】:How to populate repetitive sequence number based on 1 batch load如何根据 1 批负载填充重复序列号
【发布时间】:2021-12-16 14:36:55
【问题描述】:

我有下表-

Id   First_Name  Last_Name  Run_Id
1    Alice       Spears      1 
2    Bob         Vance       1

我需要填充 Run_id 列,对于加载中填充的所有行,下一批数据的值应为 2。我们可以在这里使用序列吗,我不确定如何实现。

下一批加载应该如下所示-

Id   First_Name  Last_Name  Run_Id
1    Alice       Spears      1 
2    Bob         Vance       1
3    Kate        Josh        2
4    Harry       Gough       2
5    Ben         Bohmer      2

提前致谢。

【问题讨论】:

  • 目前尚不清楚如何在多用户环境中执行此操作。如果您需要每个批次的唯一标识符,您应该存储其他三个列:用户 ID(用于加载批次的用户),会话 ID(假设同一用户可能并行启动多个会话 - 在大多数情况下,他们可以) 和时间戳。然后,如果您需要为批次提供序列号,您可以 - 基于此附加数据。我相信更常见的安排是只存储一个时间戳 - 这假设两个批次不会完全同时加载,因此两个或多个批次不会被视为一个。

标签: sql oracle oracle-sqldeveloper sequence


【解决方案1】:

创建一个序列和一个函数。然后调用该函数并将其保存到一个变量中,并在执行 DML 时引用该变量。

CREATE SEQUENCE batch_seq
  START WITH 1
  MAXVALUE 999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER;

       CREATE OR REPLACE FUNCTION get_batch_seq RETURN number AS l_return number;
         BEGIN 
             SELECT batch_seq.nextval into l_return from dual;
            return l_return;
        END;
/



 SELECT get_batch_seq INTO l_batch_seq FROM dual;

【讨论】:

  • @Beefstu- 感谢您的回复,这真的很有帮助。如何在填充列时为该函数使用声明的变量?
  • 声明 l_batch_seq_num PLS_INTEGER;开始……结束;
  • @porsh01 这对你有用吗?如果可以,你能接受我的解决方案吗
  • @porsh01 我的解决方案对你有用吗?如果是,请点赞。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
相关资源
最近更新 更多