使用 sql 加载器将数据从 CSV 文件加载到预言机表



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

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

SQL 加载程序是否满足此要求? 还是我需要使用任何其他 ETL 工具,如 informatica?

您可以使用

加载选项:INSERT来实现它。

它要求表在加载之前为空。SQL*Loader 如果表包含行,则终止并显示错误。

您可以参考:将数据加载到空表中

干杯!!

无论您在哪个操作系统环境中工作,您都可以始终使用外部表ORACLE_LOADER访问驱动程序。

来自 Oracle 文档选择外部表与 SQL*加载程序

外部表和 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;
/

最新更新