【问题标题】:Loading data from CSV file to oracle table using sql loader使用 sql loader 将数据从 CSV 文件加载到 oracle 表
【发布时间】:2019-11-19 15:59:26
【问题描述】:

我想使用以下条件将数据从 CSV 文件加载到 oracle 表中。

如果表为空,则只应将数据加载到表中,否则不应加载数据。

这个要求可以用 sql loader 实现吗?还是我需要使用任何其他 ETL 工具,例如 informatica?

【问题讨论】:

  • 您在 Unix 环境下工作吗?哪个平台/程序/应用程序运行您的 sql 加载程序?
  • 不,不是 unix。我正在使用窗户

标签: sql oracle sql-loader


【解决方案1】:

无论您在哪个操作系统环境下工作,您都可以使用ORACLE_LOADER 访问驱动程序,使用External tables

来自 Oracle 文档Choosing External Tables Versus SQL*Loader

外部表的记录解析和SQL*Loader很相似, 所以通常相同的没有主要的性能差异 记录格式。

您只需要对目录对象进行读/写操作。如果您可以创建一个(CREATE DIRECTORY YOUR_DIR AS '<directory_path>')或者请求其他超级用户提供适当的授权(GRANT READ ON DIRECTORY YOUR_DIR TO yourschema),那就太好了。

外部表可以使用EXECUTE IMMEDIATE动态创建

DECLARE
     l_exists INT;
BEGIN
SELECT CASE
     WHEN EXISTS ( SELECT 1
                     FROM yourmaintable
                   WHERE ROWNUM = 1
                 ) THEN 1
     ELSE 0 END
into l_exists from dual;

  IF  l_exists : = 0 THEN --If the Table is empty


EXECUTE IMMEDIATE q'{ CREATE TABLE your_ext_table   -- Using the alternate 
                                                    -- quoting mechanism
   (col1         INT,
    col2         VARCHAR2(20)
    col3         DATE)
 ORGANIZATION EXTERNAL
   (TYPE ORACLE_LOADER    -- Use the ORACLE_LOADER driver to load your file.
    DEFAULT DIRECTORY YOUR_DIR
    ACCESS PARAMETERS
      (RECORDS DELIMITED BY NEWLINE
       FIELDS (col1      CHAR(2),
               col2      VARCHAR2(20),
               col3      VARCHAR2(20) date_format DATE mask "mm/dd/yyyy"
              )
      )
    LOCATION ('yourfile.csv')
   )}'
     ;

EXECUTE IMMEDIATE 'INSERT INTO yourmaintable (col1,col2,col3)  --dynamic Insert
                   select * FROM your_ext_table';
END IF;



END;
/

【讨论】:

    【解决方案2】:

    您可以使用加载选项:INSERT 来实现它。

    加载前要求表格为空。 SQL*加载器 如果表包含行,则以错误终止。

    您可以参考:Loading Data into Empty Tables

    干杯!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多