Oracle SQLLDR - 使用参数文件指定多个日志、dsc、坏文件

Posted

技术标签:

【中文标题】Oracle SQLLDR - 使用参数文件指定多个日志、dsc、坏文件【英文标题】:Oracle SQLLDR - Using parameter file to specify multiple log, dsc, bad files 【发布时间】:2021-04-20 17:54:20 【问题描述】:

我不确定如何使用 Oracle SQLLDR 将文件加载到单个表中来处理这种情况。 我有多个 infile,我可以毫无问题地加载它们。但是,我想在我的参数文件中为每个日志文件、坏文件和丢弃目录/文件。这可能吗?我试过在参数文件中列出它们,文件名之间有空格,但这似乎不起作用。我在任何地方都没有找到有关如何执行此操作的说明或示例。

我使用一个命令来包含参数文件:

sqlldr user/password@pdbxxxxx PARFILE=/directory/parameter_file.par

我的参数文件示例:

    CONTROL=/directory/control_file.ctl
    LOG=/directory/log_file.log
    BAD=/directory/bad_file.bad
    DISCARD=/directory/discard_file.dsc
    DISCARDMAX=100000000
    DATA=/directory/data_file-01.csv
    DIRECT=FALSE

我的控制文件示例:

load data
infile '/directory/data_file-01.csv'
infile '/directory/data_file-02.csv'
infile '/directory/data_file-03.csv'
APPEND INTO TABLE my_table
                fields terminated by "," optionally enclosed by '"'
                TRAILING NULLCOLS
  (
        col1 CHAR
    ,   col2 CHAR                  
    ,   col3 CHAR
)

【问题讨论】:

【参考方案1】:

看起来像 Specifying multiple data files,如文档中所述。

摘录:

要在一次 SQL*Loader 运行中从多个数据文件中加载数据,请对每个数据文件使用 INFILE 子句。

您还可以为每个数据文件指定单独的丢弃文件和坏文件。在这种情况下,必须在每个数据文件名之后立即声明单独的坏文件和丢弃文件。

几个例子:

INFILE  mydat1.dat  BADFILE  mydat1.bad  DISCARDFILE mydat1.dis 
INFILE  mydat2.dat 
INFILE  mydat3.dat  DISCARDFILE  mydat3.dis 

【讨论】:

谢谢。这需要编辑控制文件,对吧?我正在寻找一种解决方案,可以将这些规范添加到参数文件中。 我认为你不能,除非你动态地创建一个控制文件。这将需要一个操作系统级别的脚本,使用您选择的编程语言。

以上是关于Oracle SQLLDR - 使用参数文件指定多个日志、dsc、坏文件的主要内容,如果未能解决你的问题,请参考以下文章

Oracle使用sqlldr导入多文件到多个表

Oracle数据库sqlldr工具的使用

sqlserver中datetime怎样sqlldr加载到oracle

oracle数据库sqlldr命令的使用

Oracle 批量插入数据怎么做

oracle 外部表之 sqlldr 生成