首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为每个文件生成不同的序列号

为每个文件生成不同的序列号
EN

Stack Overflow用户
提问于 2019-05-23 09:56:42
回答 1查看 358关注 0票数 0

我正在使用SQL-loader将.csv文件加载到我的oracle表中。我有多个具有相同列的文件。每个文件大约有500多条记录。我在表中有一个额外的列"COLUMN5“,它不在.csv文件中。我需要为每个.csv文件更新一个唯一编号的COLUMN5。

例如,第一个csv文件有500条记录,因此对于所有500条记录,它应该是1个唯一编号。第二个csv文件包含300条记录,因此对于所有这300条记录,下一个唯一编号。有没有办法做到这一点。我已经完成了下面的工作。

我使用的是Number.Nextval序列,但它为每个记录添加了一个编号。

下面是我的控制文件。

加载数据

嵌入'sample.csv‘

文件中的“sample2.csv”

将以",“结尾的TABLE1字段追加到表NULLCOLS ( COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5 "NUMBER.NEXTVAL”)

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 23:36:12

我有一个类似的需求,需要为加载到表中的每个文件的每一行添加一个load_date和序列ID。这样就很容易按日期查询,或者如果某个文件需要“回退”,我们可以删除加载序列id与相关文件匹配的位置。首先,我创建了一个名为X_LOAD_SEQ的序列来保存会话之间的当前值。然后,我创建了一个包含load_date和load_seq_id变量的包,以及返回它们的函数。在包体中,代码在设置这些值的实例化时运行。我向每个表添加了一个LOAD_DATE和LOAD_SEQ_ID列,创建了包,并将这些行添加到每个控制文件的末尾(请注意,表中不能包含具有这些名称的列):

代码语言:javascript
复制
,LOAD_DATE    date "MM/DD/YYYY" "to_char(trunc(schema.load_seq.get_load_date), 'mm/dd/yyyy')"
,LOAD_SEQ_ID  decimal external  "schema.load_seq.get_load_seq_id"

包:

代码语言:javascript
复制
CREATE OR REPLACE PACKAGE SCHEMA.LOAD_SEQ AS
    /******************************************************************************
       NAME:       LOAD_SEQ
       PURPOSE:    Sets unique load_date and Load_seq_id per session when
                   the package is instantiated.  Package functions are
                   intended to be called from control files so all rows in a
                   file load will have the same load_date and load_seq_id.

                   When the functions are called, the package is instantiated and
                   the code at the bottom is run once for the session, setting the
                   load_date and load_seq_id.  The functions simply return the values
                   which will remain the same for that session.

       EXAMPLE:    ,LOAD_SEQ_ID  DECIMAL EXTERNAL "load_seq.get_load_seq_id"
                   (each row then has the same load_seq_id).

       REVISIONS:
       Ver        Date        Author           Description
       ---------  ----------  ---------------  ------------------------------------
       1.0        2/20/2017   Gary_W           1. Created this package.
    ******************************************************************************/
    NEXT_LOAD_SEQ_ID   NUMBER;
    NEXT_LOAD_DATE     DATE;

    FUNCTION GET_LOAD_SEQ_ID RETURN NUMBER;
    FUNCTION GET_LOAD_DATE   RETURN DATE;

END LOAD_SEQ;
/

CREATE OR REPLACE PACKAGE BODY SCHEMA.LOAD_SEQ AS
    FUNCTION GET_LOAD_SEQ_ID RETURN NUMBER IS
    BEGIN
        RETURN LOAD_SEQ.NEXT_LOAD_SEQ_ID;
    END GET_LOAD_SEQ_ID;

    FUNCTION GET_LOAD_DATE RETURN DATE IS
    BEGIN
        RETURN LOAD_SEQ.NEXT_LOAD_DATE;
    END GET_LOAD_DATE;

BEGIN
    -- This code is run once, when the package is first called by the session.
    -- It sets the package variables which then do not change during the life of the session.
    SELECT SYSDATE, X_LOAD_SEQ.NEXTVAL
    INTO LOAD_SEQ.NEXT_LOAD_DATE, LOAD_SEQ.NEXT_LOAD_SEQ_ID
    FROM DUAL;
END LOAD_SEQ;
/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56267130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档