2012-04-03 2 views
2

У меня есть. CSV-файл, который содержит данные только для определенных столбцов в таблице. Как импортировать этот CSV в таблицу, оставив неповрежденные другие столбцы (или установив значение NULL)?Как загрузить CSV-данные в таблицу Oracle, в которой больше столбцов, чем файл csv?

Первоначально таблица имела те же столбцы, что и файл .csv, и я использую этот SQL загрузчик:

LOAD DATA 
INFILE '"Path"/file.csv' 
APPEND 
INTO TABLE MY_TABLE 
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' 
(
    COLUMN1, 
    COLUMN2, 
    COLUMN3, 
    COLUMN4, 
    COLUMN5 
) 

, но потом мне пришлось добавить некоторые другие столбцы таблицы, которые должны быть обновлены с данными другие таблицы, и я хочу обновить их (используя триггер) при вставке данных из .csv для начальных столбцов. Итак, как мне импортировать в таблицу только столбцы в .csv?

+0

Вы можете использовать внешнюю таблицу, как этот пример здесь: https://forums.oracle.com/forums/thread.jspa?threadID=545565 – Ollie

ответ

3

Вам нечего делать.

Будут отправлены только значения столбцов из файла.

Другие столбцы получат свое значение по умолчанию (обычно NULL, но это зависит от определения столбца) при вставке строк.

Не уверен, что вы имеете в виду с оставляя нетронутыми другие столбцы, так как SQL * Loader будет только вставки новых строк, нет ничего, чтобы быть «оставлено без изменений».

+0

вы правы ... это не реально сделать смысл "оставив другие столбцы неповрежденными" ... и он работает, как вы сказали, проблема заключалась в том, что триггер не был определен правильно ... спасибо: P – zetordie

0

Также вы можете использовать awk.

Вот подробный пример того, как составлять SQL-запросы на основе значений из файла CSV.

SQL> create table MY_TABLE(a varchar2(100), b varchar2(100)); 

[[email protected] ~]$ tail Some_Input_CSV_file 
Some Data A 1,Some Data B 1 
Some Data A 2,Some Data B 2 
Some Data A 3,Some Data B 3 
Some Data A 4,Some Data B 4 
Some Data A 5,Some Data B 5 
Some Data A 6,Some Data B 6 
Some Data A 7,Some Data B 7 
Some Data A 8,Some Data B 8 
Some Data A 9,Some Data B 9 
Some Data A 10,Some Data B 10 
[[email protected] ~]$ 

[[email protected] ~]$ cat Some_Input_CSV_file | awk -F, ‘ { printf(“insert into MY_TABLE values(trim(\x27%s\x27), trim(\x27%s\x27));\n”, $1, $2); } ‘ > RunMe.sql 

[[email protected] ~]$ tail RunMe.sql 
insert into MY_TABLE values(trim(‘Some Data A 1′), trim(‘Some Data B 1′)); 
insert into MY_TABLE values(trim(‘Some Data A 2′), trim(‘Some Data B 2′)); 
insert into MY_TABLE values(trim(‘Some Data A 3′), trim(‘Some Data B 3′)); 
insert into MY_TABLE values(trim(‘Some Data A 4′), trim(‘Some Data B 4′)); 
insert into MY_TABLE values(trim(‘Some Data A 5′), trim(‘Some Data B 5′)); 
insert into MY_TABLE values(trim(‘Some Data A 6′), trim(‘Some Data B 6′)); 
insert into MY_TABLE values(trim(‘Some Data A 7′), trim(‘Some Data B 7′)); 
insert into MY_TABLE values(trim(‘Some Data A 8′), trim(‘Some Data B 8′)); 
insert into MY_TABLE values(trim(‘Some Data A 9′), trim(‘Some Data B 9′)); 
insert into MY_TABLE values(trim(‘Some Data A 10′), trim(‘Some Data B 10′)); 
[[email protected] ~]$ 

[[email protected] ~]$ sqlplus myuser/[email protected] 

SQL> @RunMe.sql 

… 

1 row created. 

1 row created. 

1 row created. 

1 row created. 

1 row created. 

SQL> commit; 

Commit complete. 

SQL> exit 
Смежные вопросы