仅允许DML时将CSV文件导入Oracle

时间:2014-09-25 12:23:14

标签: sql database oracle csv import

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

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

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

2 个答案:

答案 0 :(得分: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,Bar,829823832

答案 1 :(得分:0)

直接从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 ...声明中重新订购和/或执行计算。