我正在使用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”)
发布于 2019-05-23 23:36:12
我有一个类似的需求,需要为加载到表中的每个文件的每一行添加一个load_date和序列ID。这样就很容易按日期查询,或者如果某个文件需要“回退”,我们可以删除加载序列id与相关文件匹配的位置。首先,我创建了一个名为X_LOAD_SEQ的序列来保存会话之间的当前值。然后,我创建了一个包含load_date和load_seq_id变量的包,以及返回它们的函数。在包体中,代码在设置这些值的实例化时运行。我向每个表添加了一个LOAD_DATE和LOAD_SEQ_ID列,创建了包,并将这些行添加到每个控制文件的末尾(请注意,表中不能包含具有这些名称的列):
,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"包:
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;
/https://stackoverflow.com/questions/56267130
复制相似问题