Загружать данные из CSV-файла (данные, разделенные конвейером «|») в таблицу с помощью загрузчика SQL, когда данные представлены в двойных кавычках - PullRequest
0 голосов
/ 09 апреля 2019

Я загружаю данные CSV-файла в таблицу EMPLOYEE с помощью SQL * Loader.

Данные моего CSV-файла разделены каналом (|):

EMPID|EMPNAME_ADDRESS|SALARY|GRADE
123|Rams Hyd|1000|A1
124|Sand MUM|2,000|A2
125|"PRASANNA qwer trasf\"501 advv vvd, qee ggg\trfe        \411005       THE|3,00,000|A3

, а мой контрольный файл -:

LOAD DATA
Insert INTO TABLE EMPLOYEE
Fields terminated by "|" Optionally enclosed by '"' TRAILING NULLCOLS
(
   EMPID,
   EMPNAME,
   SALARY,
   GRADE
)

Когда я загружаю данные, используя вышеуказанный контрольный файл, первые две записи загружаются нормально, а для третьей записи я получаю ошибку, как указано ниже.

no terminator found after TERMINATED and ENCLOSED field

Пожалуйста, предложите внести изменения для правильной загрузки данных.

1 Ответ

0 голосов
/ 09 апреля 2019

Вот способ загрузки таких данных.

Во-первых, целевая таблица (надеюсь, это имеет смысл; вы должны были предоставить ее):

SQL> create table employee
  2  (empid   number,
  3   empname varchar2(200),
  4   salary  number,
  5   grade   varchar2(10)
  6  );

Table created.

SQL>

Контрольный файл: обратите внимание наОпция SKIP (которая пропускает строку заголовка), а также вызов функции REPLACE для столбца SALARY (для удаления лишних запятых, которые форматируют вещи; добавьте их позже, в презентации слой).

options (skip = 1)
load data 
infile *
replace
into table employee
fields terminated by "|" TRAILING NULLCOLS 
(
empid,
empname,
salary "replace(:salary, ',', null)",
grade)

begindata
EMPID|EMPNAME_ADDRESS|SALARY|GRADE
123|Rams Hyd|1000|A1
124|Sand MUM|2,000|A2
125|"PRASANNA qwer trasf\"501 advv vvd, qee ggg\trfe        \411005       THE|3,00,000|A3

Сессия загрузки:

SQL> $sqlldr scott/tiger control=test06.ctl log=test06.log

SQL*Loader: Release 11.2.0.2.0 - Production on Uto Tra 9 19:37:46 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 2
Commit point reached - logical record count 3

SQL> select * From employee;

     EMPID EMPNAME                                      SALARY GRADE
---------- ---------------------------------------- ---------- ----------
       123 Rams Hyd                                       1000 A1
       124 Sand MUM                                       2000 A2
       125 "PRASANNA qwer trasf\"501 advv vvd, qee      300000 A3
           ggg\trfe        \411005       THE


SQL>
...