oracle - SQL* Loader 映射不同表列中的 DataFile 字段
问题描述
我正在尝试从不同表中的数据文件加载数据,我阅读了很多关于字段声明和定界的内容(Position(n:n),由 终止)。关键是我不知道该怎么做我需要做的事情。让我用一个例子来解释这一点。
我有两个表(人,电话):person_table(person_id_pk,person_name)-phone_table(person_id_pk,phone)
我有一个数据文件:
$ datafile.txt
1,jack pierson,+13526985442
2,Katherine McLaren,+15264586548
我的意思是,当我声明我的 ConfigFile.ctl 时,我如何指定字段编号 3(电话字段)应该插入或附加到“phone_table”中,而其他两个字段(person_id、person_name)应该插入或附加到“person_table”
考虑到字段不是固定长度,我的参考是字段位置。(字段数据文件位置)
我想尝试类似的东西
$configfile.ctl
LOAD DATA
INFILE datafile.txt
APPEND
INTO TABLE person_table
(
person_id_pk POSITION (*) INTEGER EXTERNAL TERMINATED BY "," ,
person_name POSITION(*+1) CHAR(30) TERMINATED BY ","
)
INTO TABLE phone_table
(
person_id_fk POSITION (*) INTEGER EXTERNAL TERMINATED BY ","
phone ------> Right here is my point, how can I specify to SQL Loader than here
should be the field number 3 from datafile
)
我希望你们明白我的意思。这对我来说是一个巨大的问题,因为我正在处理包含 60、80 甚至 100 个字段(基于 Excel 文件的列)的 CSV 文件。每个字段或字段组可以在不同的表中。
我非常感谢您可以授予我的指南和帮助。我的示例和控制文件声明可能是错误的,我还没有实现任何东西。所以我愿意接受你能给我的每一个建议。
解决方案
您的控制文件应如下所示。第二个“INTO TABLE”使用 POSITION(1) 将逻辑“指针”移回当前行的开头,以便再次读取它。然后通过将其定义为 FILLER 来跳过该名称。
LOAD DATA
INFILE datafile.txt
APPEND
INTO TABLE person_table
FIELDS TERMINATED BY "," TRAILING NULLCOLS
(
person_id_pk INTEGER EXTERNAL,
person_name CHAR(30)
)
INTO TABLE phone_table
FIELDS TERMINATED BY "," TRAILING NULLCOLS
(
person_id_fk POSITION(1) INTEGER EXTERNAL,
x_name FILLER,
phone CHAR(12)
)
推荐阅读
- python - 如何根据元素之间的重复子字符串删除字符串列表中的项目?
- ios - Testflight 如何在不触发完整审查的情况下更新构建?
- c# - 单击按钮时,有没有办法让文本框值显示在另一个文本框中?
- php - Laravel:在发布之前永久覆盖 Laravel 包中的依赖项配置
- python - 张量流损失:NaN;准确度:0.1
- r - 为什么我的下载按钮在闪亮的应用程序中激活两次?
- c++ - 为什么以以下方式将 ID 传递给线程是不好的?
- python - 如何使用 Python 正确使用 If 语句
- firebase - Firebase 托管和 Expo Web:如何将 Expo Web 构建部署到 Firebase 托管
- java - react-native 医生中的 JDK 版本