【问题标题】:Loading all columns of CSV into Oracle table in bulk将 CSV 的所有列批量加载到 Oracle 表中
【发布时间】:2014-11-13 15:39:14
【问题描述】:

我正在尝试将 CSV 中的所有列加载到我的 Oracle 表中。两者之间的列匹配。我正在尝试使查询动态化,因此我将使用它将数据从任何 CSV 加载到任何匹配的表中,因此,我想避免命名列名(jobCounter 列应该替换为通配符(如果有的话)。我不确定这是否是正确的方法。

LOAD DATA
INFILE 'C:\Users\Theuser\Documents\20121017.csv'
APPEND
INTO TABLE SRT_FACTOR_20121017
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
   jobCounter //* I want to replace this with an asterisk to include all the columns
)

目前,我在使用 Oracle SQL Developer 时遇到以下错误:

Error at Command Line : 217 Column : 5
Error report -
SQL Error: ORA-00928: missing SELECT keyword
00928. 00000 -  "missing SELECT keyword"
*Cause:    
*Action:

有什么想法吗?

【问题讨论】:

  • 第 217 行位于数据文件的深处。查看数据文件中大约 205 - 220 行,看看那里是否有什么奇怪的东西。

标签: sql oracle oracle11g


【解决方案1】:

事实上,您不能通过 SQL*Loader 将任何列加载到匹配的表中。字段定义必须准确。

【讨论】:

    【解决方案2】:

    您正尝试在 SQL Developer 中运行 sqlldr 脚本。 SQL Developer 大部分只懂 SQL 和 PL/SQL。

    所以您已经使用 SQL Developer 为您生成了该脚本 - 您几乎完成了。

    现在只需从您的 doc/NIX cmd/shell 提示符运行该脚本...假设您安装了包含 sqlldr 程序的 Oracle 客户端。

    需要更多帮助?我讲这个过程here

    【讨论】:

    • 我已经在 SQL Developer 中运行它来测试它,然后再将它插入我的 .NET 代码。你是说它在 SQL Developer 中不起作用,因此在我的代码中不起作用?
    • 您展示的代码只能在 sqlldr 程序本身中工作
    【解决方案3】:

    您提供的文件是 sqlldr 使用的控制文件。它基本上告诉 sqlldr 哪些数据以及在哪个表(和相应的列)中存储所述数据。

    如果您想在您的 .NET 项目中包含负载,您必须运行一个外部命令,该命令使用某些参数调用 sqlldr。

    例子:

    public static void loadDataFromFile(string dbUser, string dbHost, string dbPass, string ctrlFile, string loaderLog, string loaderBad)
    {
        Process prcLoader = new Process();
        prcLoader.StartInfo.FileName = "sqlldr";
        prcLoader.StartInfo.Arguments = dbUser + "@" + dbHost + "/" + dbPass + " control=" + ctrlFile + " log=" + loaderLog + " bad=" + loaderBad + " errors=9999";
        prcLoader.Start();
        prcLoader.WaitForExit();
    }
    

    我建议你在调用上述方法时加密dbUser、dbPass等数据库连接数据并解密它们。实现此目的的一种方法是将加密数据存储在您的项目设置中并从那里读取。

    下面的字符串是文件的路径,其中 ctrlFile = 控制文件(您发布的那个),loaderLog = sqlldr 的输出(包含成功加载的行),loaderBad = sqlldr 的输出(包含不成功的行,这可能未加载)。

    字符串 ctrlFile,字符串 loaderLog,字符串 loaderBad

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      相关资源
      最近更新 更多