最近开始研究SQL Loader,享受它的工作方式。 我们遇到了一个问题,我们必须以csv格式加载所有列(例如excel中的10列),但目标表包含大约15个字段。 当您希望跳过源文件中的列但不确定在此处执行的操作时,填充程序有效。 使用是临时表有帮助,但还有其他选择吗?
非常感谢任何帮助。 感谢。
答案 0 :(得分:3)
您必须在控制文件中指定列
推荐阅读: SQL*Loader Control File Reference
10控制文件的其余部分包含字段列表,该列表提供有关正在加载的表中列格式的信息。有关控制文件该部分的信息,请参阅Chapter 6。
摘自第6章:
1 (hiredate SYSDATE,
2 deptno POSITION(1:2) INTEGER EXTERNAL(2)
NULLIF deptno=BLANKS,
3 job POSITION(7:14) CHAR TERMINATED BY WHITESPACE
NULLIF job=BLANKS "UPPER(:job)",
mgr POSITION(28:31) INTEGER EXTERNAL
TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
ename POSITION(34:41) CHAR
TERMINATED BY WHITESPACE "UPPER(:ename)",
empno POSITION(45) INTEGER EXTERNAL
TERMINATED BY WHITESPACE,
sal POSITION(51) CHAR TERMINATED BY WHITESPACE
"TO_NUMBER(:sal,'$99,999.99')",
4 comm INTEGER EXTERNAL ENCLOSED BY '(' AND '%'
":comm * 100"
)
在此示例控制文件中,左侧显示的数字不会出现在实际控制文件中。他们在此示例中键入以下列表中的解释性说明:
1 SYSDATE将列设置为当前系统日期。请参阅将列设置为当前日期。
2 POSITION指定数据字段的位置。请参阅指定数据字段的位置。
INTEGER EXTERNAL是该字段的数据类型。请参阅指定数据字段和数字外部的数据类型。
NULLIF子句是可用于指定字段条件的子句之一。请参阅使用WHEN,NULLIF和DEFAULTIF子句。
在此示例中,使用BLANKS参数将字段与空白进行比较。请参阅将字段比较为BLANKS。
3 TERMINATED BY WHITESPACE子句是可以为字段指定的分隔符之一。请参见TERMINATED Fields。
4 ENCLOSED BY子句是另一种可能的字段分隔符。见封闭字段。