2014-11-12 2 views
0

Я пытаюсь загрузить все столбцы из моего CSV в свою таблицу Oracle. Столбцы между ними совпадают. Я пытаюсь сделать запрос динамическим, поэтому я бы использовал его для загрузки данных из любого CSV в любую сопоставимую таблицу, поэтому я хочу избежать именования имен столбцов (столбец jobCounter следует заменить подстановочным знаком (если таковой имеется). . Я не уверен, что это правильный путьЗагрузка всех столбцов CSV в таблицу Oracle навалом

LOAD DATA 
INFILE 'C:\Users\Theuser\Documents\20121017.csv' 
APPEND 
INTO TABLE SRT_FACTOR_20121017 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
(
    jobCounter //* I want to replace this with an asterisk to include all the columns 
) 

на данный момент, я получаю следующее сообщение об ошибке при использовании Oracle SQL Developer:

Error at Command Line : 217 Column : 5 
Error report - 
SQL Error: ORA-00928: missing SELECT keyword 
00928. 00000 - "missing SELECT keyword" 
*Cause:  
*Action: 

Любые идеи

+0

Линия 217 находится глубоко в недрах вашего файла данных. Взгляните на строки около 205 - 220 в файле данных и посмотрите, есть ли там что-то напуганное. – Olaf

ответ

0

Дело в том, что вы не можете загружайте любые столбцы в таблицу соответствия через SQL * Loader. Поля defintion должны быть быть точным.

0

Вы пытаетесь запустить скрипт sqlldr в SQL Developer. SQL Developer только понимает SQL и PL/SQL по большей части.

Итак, вы использовали SQL Developer для создания этого скрипта для вас - вы почти у цели.

Теперь просто запустите этот скрипт из командной строки doc/NIX cmd/shell ... при условии, что у вас установлен клиент Oracle, который включает в себя программу sqlldr.

Нужна дополнительная помощь? Я говорю об этом процессе here.

+0

Я запустил его в SQL Developer, чтобы проверить его, прежде чем подключать его в своем .NET-коде. Вы говорите, что он не работает в SQL Developer и, следовательно, в моем коде? – alwaysVBNET

+0

код, который вы показываете, будет только EVER работать в самой программе sqlldr – thatjeffsmith

0

Файл, который вы предоставили, представляет собой файл управления, который будет использоваться sqlldr. Он в основном сообщает sqlldr, какие данные и в какой таблице (и соответствующих столбцах) хранить указанные данные.

Если вы хотите включить загрузку в свой проект .NET, вы должны запустить внешнюю команду, которая вызывает sqlldr с определенными параметрами.

Пример:

public static void loadDataFromFile(string dbUser, string dbHost, string dbPass, string ctrlFile, string loaderLog, string loaderBad) 
{ 
    Process prcLoader = new Process(); 
    prcLoader.StartInfo.FileName = "sqlldr"; 
    prcLoader.StartInfo.Arguments = dbUser + "@" + dbHost + "/" + dbPass + " control=" + ctrlFile + " log=" + loaderLog + " bad=" + loaderBad + " errors=9999"; 
    prcLoader.Start(); 
    prcLoader.WaitForExit(); 
} 

Я рекомендую вам зашифровать данные подключения к базе данных, таких как DBUser, DBPass и т.д., и расшифровать их при вызове метода выше. Один из способов добиться этого - просто сохранить зашифрованные данные в настройках вашего проекта и прочитать их оттуда.

Строки ниже - это пути к файлам, где ctrlFile = управляющий файл (тот, который вы опубликовали), loaderLog = вывод sqlldr (содержит успешные загруженные строки), loaderBad = вывод sqlldr (содержит неуспешные строки, которые не может быть загружена).

 
string ctrlFile, string loaderLog, string loaderBad 
Смежные вопросы