2014-11-12 3 views
0

내 CSV의 모든 열을 Oracle 테이블로로드하려고합니다. 이 둘 사이의 열은 일치합니다. 그래서 모든 CSV에서 어떤 일치하는 테이블에 데이터를로드 할 수 있도록 동적 쿼리를 만들려고 노력하고있어, 난 열 이름 (jobCounter 열이 와일드 카드로 교체되어야한다 (어떤 경우) 이름을 지정하지 않도록하고 싶습니다. .? 오라클 SQL 개발자 사용할 때 그 올바른 방법입니다 있는지 확실하지 않습니다 순간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 
) 

, 나는 다음과 같은 오류를 받고 있어요 :

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를 통해 일치하는 테이블에 모든 열을로드합니다. 정의 란 이어야합니다.

0

SQL Developer에서 sqlldr 스크립트를 실행하려고합니다. SQL Developer는 대부분 SQL과 PL/SQL만을 이해합니다.

그래서 SQL Developer를 사용하여 스크립트를 생성했습니다. 거의 완료되었습니다.

이제 doc/NIX cmd/shell 프롬프트에서 해당 스크립트를 실행하십시오. sqlldr 프로그램이 포함 된 Oracle 클라이언트가 설치되어 있다고 가정하십시오.

도움이 더 필요하십니까? 나는이 과정에 대해 이야기한다. here.

+0

필자는 필자의 .NET 코드에 플러그 인하기 전에 그것을 테스트하기 위해 SQL Developer에서 실행했습니다. SQL Developer에서 작동하지 않으며 따라서 제 코드에서 작동하지 않는다고 말하는 것입니까? – alwaysVBNET

+0

표시하는 코드는 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 
관련 문제