【问题标题】:Importing CSV file to Oracle when only DML are allowed仅允许 DML 时将 CSV 文件导入 Oracle
【发布时间】:2014-09-25 12:23:13
【问题描述】:

我的数据库托管在我只能向其发出 DML statements 的服务器上。

是否有一个 SQL 命令(用于 Oracle),我可以使用它来用 CSV 文件中的条目填充表格? CSV 文件和表格的列是相同的,但如果有一个命令版本,我可以决定文件中的哪个字段转到哪个列,那就更好了。

此外,除了 Oracle SQL Developer 之外,我无法安装任何东西,所以我需要一个可以从那里运行的 SQL 代码。我相信 SQL*Loader 和外部表在这种情况下没有帮助。

【问题讨论】:

  • 这已在 SO 中多次回答。请下次搜索。
  • 你可以使用外部表
  • @OldProgrammer 我看到了外部表的解决方案,但我更希望得到类似于 LOAD DATA INFILE 命令的东西。 docs.oracle.com/cd/E17952_01/refman-5.1-en/load-data.html
  • @Ivan " 我更希望得到类似于 LOAD DATA INFILE 命令的东西" 你肯定需要解释@987654323 的关键特性 @你在找什么?也许您有一些非常具体的需求,外部表无法解决?
  • @SylvainLeroux 我无权访问服务器,因此很难使用外部表。我想使用 SQL*loader 命令 LOAD DATA INFILE(从文件加载到表),如果可能,在 Oracle SQL 开发人员中调用它。

标签: sql database oracle csv import


【解决方案1】:

使用 oracle 外部表

create directory ext_data_files as 'C:\'; -- create oracle directory object point to the directory where your file resides, using this we will fetch the csv data

create table teachers_ext (
      first_name     varchar2(15),
      last_name      varchar2(15),
      phone_number   varchar2(12)
)
organization external (
  type oracle_loader
  default directory ext_data_files
  access parameters (fields terminated by ',' )
  location ('teacher.csv')
)
reject limit unlimited
/

你的 csv 会是这样的

约翰,史密斯,8737493

Foo,酒吧,829823832

【讨论】:

    【解决方案2】:

    直接复制自Oracle 9i documentation:

    CREATE TYPE student_type AS object (
    student_no CHAR(5),
    name CHAR(20))
    /
    
    CREATE TABLE roster (
      student student_type,
      grade CHAR(2));
    

    还假设有一个外部表定义如下:

    CREATE TABLE roster_data (
      student_no CHAR(5),
      name CHAR(20),
      grade CHAR(2))
      ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
                             ACCESS PARAMETERS (FIELDS TERMINATED BY ',')
                             LOCATION ('foo.dat'));
    

    要从 roster_data 加载表名册,您需要指定一些内容 类似于以下内容:

    INSERT INTO roster (student, grade)
      (SELECT student_type(student_no, name), grade FROM roster_data);
    

    外部表访问驱动程序(又名ORACLE_LOADER)接受一系列选项来处理许多不同的情况:固定宽度、CSV、字节序(二进制数据)、分隔符……再一次,详情请见the doc


    ...如果有一个命令版本,我可以决定文件中的哪个字段转到哪个列,那就更好了。

    正如您现在所理解的那样,外部表的处理方式与任何其他表一样。因此,您可以像往常一样在您的 INSERT ... SELECT ... 语句中重新排序和/或执行计算。

    【讨论】:

      猜你喜欢
      • 2015-07-15
      • 2023-03-31
      • 2018-05-16
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      相关资源
      最近更新 更多