Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 做这个ETL工作的最佳方法是什么?_Excel_Oracle_Etl - Fatal编程技术网

Excel 做这个ETL工作的最佳方法是什么?

Excel 做这个ETL工作的最佳方法是什么?,excel,oracle,etl,Excel,Oracle,Etl,我用coulmns在excel中有一些数据,我需要将这些数据从excel迁移到Oracle中的一些表中。我如何以最佳和快速的方式实现这一点。? 我需要从单个excel文件加载Oracle中的5个表。这类任务是否有可用的工具?方法如下 假设你有两张这样的桌子 create table tabA (col_a number, col_b number); create table tabB (col_b number, col_c varchar2(10)); 您需要从a文件d:\file.csv

我用coulmns在excel中有一些数据,我需要将这些数据从excel迁移到Oracle中的一些表中。我如何以最佳和快速的方式实现这一点。?
我需要从单个excel文件加载Oracle中的5个表。这类任务是否有可用的工具?

方法如下

假设你有两张这样的桌子

create table tabA (col_a number, col_b number);
create table tabB (col_b number, col_c varchar2(10));
您需要从a文件d:\file.csv开始加载数据,如下所示:

col_a,col_b,col_c
10,99,"a"
20,999,"b c d"
您首先需要创建一个目录,然后构建一个包含CSV的表:

CREATE DIRECTORY dir_d AS 'D:\';
CREATE TABLE csvFile
(
    Col_a                                      VARCHAR2(4000),
    Col_b                                      VARCHAR2(4000),
    Col_c                                      VARCHAR2(4000)
)
ORGANIZATION EXTERNAL
    (TYPE ORACLE_LOADER
          DEFAULT DIRECTORY dir_d
              ACCESS PARAMETERS
       (RECORDS DELIMITED BY NEWLINE
        SKIP 1
        FIELDS
            TERMINATED BY ','
            OPTIONALLY ENCLOSED BY '"'
            LRTRIM
            MISSING FIELD VALUES ARE NULL
      )
          LOCATION('file.csv'));
现在,您可以使用SQL在表中插入数据,从CSV表开始,使用所需的所有逻辑;例如:

insert into tabA select col_a, col_b from csvFile;
insert into tabB select col_b, col_c from csvFile;

SQL> select * from tabA;

     COL_A      COL_B
---------- ----------
        10         99
        20        999

SQL> select * from tabB;

     COL_B COL_C
---------- ----------
        99 a
       999 b c d

如果您只想将数据放入一个表中,可以使用sqldeveloper将数据导入表中,如下所示:

Oracle的工具可以处理多表插入。如果您不想麻烦地构建适当的控制文件,可以首先使用您选择的工具将数据加载到暂存表中

然后,您可以从暂存表执行单个插入,或使用(?)语句:

insert all into table_a (cola, colb, colc) values (col_a, col_b, col_c)
           into table_b (cola, colb, colc, cold) values (col_a, col_b, col_c col_d)
  select col_a, col_b, col_c, col_d from staging_table;

全部插入
当col_a<1000时
进入表a(cola、colb、colc)值(COLU a、COLU b、COLU c)
当col_a在900到10000之间时
进入表b(cola、colb、colc、cold)值(COLU a、COLU b、COLU c COLU d)
其他的
进入表c(cola、colb、colc、cold)值(COLU a、COLU b、COLU c COLU d)
从暂存表中选择列a、列b、列c、列d;

使用条件insert,每个WHEN子句的计算结果为true时,将导致数据插入到指定的表中,而ELSE子句仅在没有其他选项适用时才起作用。

您是否尝试过搜索?可能存在重复的WHERE子句。。。我看到的任何地方都可以将excel导入oracle,但这对我来说都不起作用,因为我需要将这些数据存储在不同的表中。为什么不呢?你不能按顺序插入表格吗?或者您需要从单个excel“表”加载多个表吗?是@Aleksej我需要从单个excel文件加载多个表。
insert all 
  when col_a < 1000 then
    into table_a (cola, colb, colc) values (col_a, col_b, col_c)
  when col_a between 900 and 10000 then
    into table_b (cola, colb, colc, cold) values (col_a, col_b, col_c col_d)
  else
    into table_c (cola, colb, colc, cold) values (col_a, col_b, col_c col_d)
  select col_a, col_b, col_c, col_d from staging_table;