假设你有一张桌子:
CREATE TABLE Customer
(
batch_id NUMBER,
customer_name VARCHAR2(20),
customer_address VARCHAR2(100)
)
假设您有一个控制文件来填充此表:
LOAD DATA INFILE 'customers.dat' REPLACE INTO TABLE Customer ( batch_id ??????, customer_name POSITION(001:020), customer_address POSITION(021:120) )
运行SQL * Loader时,是否可以将batch_id
的值传递给我的控制文件?例如,是否可以指定绑定变量(将问号转换为:MY_AWESOME_BATCH_ID
)?
答案 0 :(得分:7)
一种相对简单的归档方法是创建一个存储函数,该函数返回批号并在装入文件中使用它。
create or replace function getBatchNumber return number as
begin
return 815;
end;
/
LOAD DATA INFILE 'customers.dat'
REPLACE
INTO TABLE Customer
(
batch_id "getBatchNumber",
customer_name POSITION(001:020),
customer_address POSITION(021:120)
)
答案 1 :(得分:2)
如果我没记错的话,不容易,但这里有几个选择:
答案 2 :(得分:1)
如果通过递增每个负载自动生成BATCH_ID值是可以接受的,那么这对我有用。样本中的10分钟间隔需要根据特定负载进行调整 - 准确地说,加载必须在指定的时间间隔内完成,下次加载不得在指定的时间内开始。
缺点是它在大量产品上明显减慢 - 这是每条线上运行MAX聚合的价格。
LOAD DATA
...
INTO TABLE XYZ
(
...
BATCH_ID expression "(select nvl(max(batch_id) + 1, 1) from extra_instruments_party_to where create_date < (sysdate - interval '10' minute))",
CREATE_DATE SYSDATE
)