Загрузка данных из CSV-файла в таблицу Oracle с помощью sql loader - PullRequest
1 голос
/ 10 июля 2019

Я хочу загрузить данные из CSV-файла в таблицу Oracle с этим условием ниже.

Если таблица пуста, то в таблицу должны загружаться только данные, в противном случае данные не должны загружаться.

возможно ли это требование с помощью sql loader?или мне нужно использовать любой другой инструмент ETL, например Informatica?

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Вы можете использовать опцию загрузки: INSERT для ее достижения.

Требуется, чтобы таблица была пустой перед загрузкой. SQL * Loader завершается с ошибкой, если таблица содержит строки.

Вы можете сослаться: Загрузка данных в пустые таблицы

Ура !!

1 голос
/ 10 июля 2019

Независимо от того, в какой среде ОС вы работаете, вы всегда можете использовать ORACLE_LOADER драйвер доступа, используя Внешние таблицы .

Из документов Oracle Выбор внешних таблиц по сравнению с 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;
/
...