2012-05-31 3 views
4

저는 데이터베이스와 프로그래밍이 처음입니다. 나는 컴퓨터 용어에 능숙하지 않아서 나와 친하게 지낸다. 내 Oracle 데이터베이스에로드하려고 시도하는 파일이 csv입니다. 여기에는 이름, 전화 번호, 서비스 날짜 등의 계정 정보가 포함되어 있습니다. Oracle 11g Release 2을 설치했습니다. 이 Oracle에서 SQL LOADER를 사용하여 CSV 파일 가져 오기

1

은) 내가 필요한 열이있는 새 테이블을 생성 SQL 로더에게

를 봤는데 .. 내가 단계별로 지금까지 단계를 수행 한 것입니다. 예를 들어,

create table Billing (TAP_ID char(10), ACCT_NUM char(10), MR_ID char(10), HOUSE_NUM char(10), STREET char(30), NAME char(50) 

2)이 테이블이 만들어 졌다는 메시지가 나옵니다. 다음으로, 내 청구 테이블과 동일한 디렉토리에 있고 .ctl 확장자를 가진 메모장의 데이터에 대한 제어 파일을 생성했습니다. GIS.csv는

load data 
infile GIS.csv 
into table Billing 
fields terminated by ',' 
(TAP_ID, ACCT_NUM, MR_ID, HOUSE_NUM, STREET, NAME) 

3) 제어 파일을 사용하여 명령 줄에서 SQLLDR 실행 ..에서 데이터를 가져 오는 파일 메신저과 같은 디렉토리에도이며 그렇게처럼 보였다 Billing.ctl을 명명

sqlldr myusername/mypassword Billing.ctl 

이것은 내가 갇혀있는 곳입니다. 필자는 정확히 내가 뭘하는지의 비디오 자습서를 볼 수 있지만이 오류 얻을 : 내가 잘못 여기 일을 할 수 있는지에

SQL*Loader-522: lfiopn failed for file (Billing.log) 

어떤 아이디어?

업데이트

난 그냥 별도의 디렉토리에 파일을 이동 나는 이전 오류를지나 가지고 가정합니다. 그렇다면 Billing.ctl과 GIS.csv는 같은 디렉토리에 있습니다.

'SQL*Loader-350: Syntax error at line 1. 

키워드 LOAD를 기대 발견 "SERV 탭 ID"

는하지만 지금은 다른 오류가 있습니다. "SERV 탭 ID", "ACCT 번호", "MTR ID", "SERV HOUSE", "SERV의 STREET", "SERV ^ '나는 그것의 그 오류 오는 이유를 이해한다. 내 청구를 해달라고

. CTL은 부하가 있습니다.

LOAD data 
infile GIS.csv 
into table Billing 
fields terminated by ',' 
(TAP_ID, ACCT_NUM, MTR_ID, SERV_HOUSE, SERV_STREET, SERV_TOWN, BIL_NAME, MTR_DATE_SET, BIL_PHONE, MTR_SIZE, BILL_CYCLE, MTR_RMT_ID) 

어떤 생각?

+0

답변이 아니므로 원래 질문에 최근 오류를 추가했습니다. 오답은 곧 삭제 될 것입니다. 또한, 내 대답을 업데이트했습니다 (아래 참조). – Codo

+0

그냥 요점. ctl 파일이 잘못되었습니다. csv 파일에는 선택 사항 인 ""열 엔클로저가 있습니다. 따라서'''로 묶인 ''을 사용해야합니다. – Ben

답변

4
SQLLDR는 제어 파일이 같은 디렉토리에 로그 파일을 작성하려고합니다. 그러나 분명히이. 그것은 아마도이없는 수 없습니다

필요한 사용 권한

Linux 또는 Unix의 경우 실행 해보십시오. sqldr을 실행하는 것과 같은 방법으로 다음 명령을 실행하십시오 :

touch Billing.log 

권한이 있는지 여부가 표시됩니다.

업데이트

적절한 명령 줄은 다음과 같습니다

sqlldr myusername/mypassword control=Billing.ctl 
+0

윈도우 7이 있고 그 폴더에 대한 사용 권한을 Everyone에 설정하려고했습니다. 그러나 여전히 운이 없다. 다른 아이디어? –

+0

GIS.csv와 Billing.ctl은 같은 디렉토리에 있습니까? * sqlldr *을 시작하기 전에 해당 디렉토리에 * cd *를 저장합니까? Billing.log 파일이 이미 있습니까? (그렇다면 먼저 삭제하십시오.) – Codo

+0

방금 ​​파일을 별도의 디렉토리로 옮겼으며 이번에는 다른 오류가 발생했습니다. 그런데 Billing.ctl과 GIS.csv는 같은 디렉터리에 있습니다. 하지만 지금은 또 다른 오류가 있습니다. –

0

"1 호선"- 유닉스 줄 바꿈 대 창에 대한 어쩌면 뭔가? (나는 위에서 언급 한 창문 7을 보았다).

+0

무엇을 의미합니까? 죄송합니다. 하하 –

+0

ctl 파일에 구문 오류가있는 것 같습니다. 사실 sqlldr은 아무런 문제가없는 줄 1을 가리킬 수 있습니다. 즉, sqlldr이 볼 수 있도록 unix 줄 바꿈 (캐리지 리턴)으로 파일을 작성했습니다. (그렇지 않으면 거기에 아무런 문제가 보이지 않습니다 -하지만 당신은 신탁 오라클 명령 줄 도구를 알고 있습니다 :-)) 어쨌든, 당신은 다음과 같은 방식으로 사용하는 경향이 sqlldr 명령을 실행하는 방법을 확인하십시오 : sqlldr control = file.ctl data = file.dat bad = file.bad. –

2

Oracle 데이터베이스에서 직접 가져 오려는 FAR_T_SNSA.csv라는 CSV 파일을 직접 hade합니다. 이것을 위해 나는 다음 단계를 수행했으며 절대적으로 잘 작동했다. 다음은 수행 할 단계입니다 :

오라클 데이터베이스에 CSV 파일을 가져 오는 방법은 무엇입니까?

  1. oracle 데이터베이스에서 가져올 .csv 형식 파일을 가져옵니다. 여기서이 이름은 "FAR_T_SNSA.csv"
  2. .csv 파일과 동일한 열 이름을 사용하여 sql에서 테이블을 만듭니다. 테이블 작성 빌링 (iocl_id char (10), iocl_consumer_id char (10));

  3. sql * loder 스크립트가 포함 된 제어 파일을 작성하십시오. 메모장에 아래의 스크립트를 입력하고 파일 형식을 All Types (*)로 선택하면 .ctl 확장명으로 저장하십시오. 여기 제어 파일의 이름이 Billing입니다. 다음과 같이 그리고 스크립트는 다음과 같습니다

    LOAD DATA 
    INFILE 'D:FAR_T_SNSA.csv' 
    INSERT INTO TABLE Billing 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    TRAILING NULLCOLS 
    (
    iocl_id, 
    iocl_consumer_id 
    ) 
    
  4. 이제 명령 프롬프트를 실행 명령 :

    Sqlldr UserId/Password 
    Control = “ControlFileName” 
    -------------------------------- 
    Here ControlFileName is Billing. 
    
1

당신은 SQL 로더를 호출 할 때 로그 파일 이름을 지정해야합니다.

sqlldr myusername/mypassword control=Billing.ctl log=Billing.log 

python 내부에서 sql loader를 호출 할 때이 문제가 발생했습니다. 다음 기사에서는 SQL 로더를 호출 할 때 지정할 수있는 모든 매개 변수를 캡처합니다. http://docs.oracle.com/cd/A97630_01/server.920/a96652/ch04.htm

0

텍스트의 경우 : 조는 "프레드는"아내 "와 함께있었습니다."라고 말했습니다.
이것은 CSV에 다음과 같이 저장됩니다.
"조는 말했습니다." "프레드는 그의"아내 "" "와 함께했습니다." "
(규칙은 큰 따옴표가 전체 필드를 둘러 싸고 큰 따옴표는 두 개의 큰 따옴표로 변환됩니다.) 따라서 간단한 Optional Enclosed By 절이 필요하지만 충분하지는 않습니다. CSV는이 규칙으로 인해 어려움이 있습니다. 해당 필드의 로더에서 Replace 절을 사용하는 경우가 있지만 데이터에 따라 충분하지 않을 수 있습니다. 종종 Oracle에서로드하려면 CSV의 사전 처리가 필요합니다. 또는 XLS로 저장하고 Oracle SQL Developer app을 사용하여 테이블로 가져 오십시오. 일회성 작업에는 좋지만 스크립팅에는 적합하지 않습니다.

0

LOAD 데이터 INFILE 'D : \ CertificationInputFile.csv' 표 CERT_EXCLUSION_LIST INTO 종료 FIELDS "|" OPTIONALLY (CERTIFICATIONNAME, CERTIFICATIONVERSION) ENCLOSED BY ' "'

1

테이블 스키마에이

로드 데이터 INFILE '데이터 파일의 위치를'보십시오.선택적으로 '|'로 묶인 ','로 끝나는 tablename 필드 명령 프롬프트에서 (필드 1, FIELD2, FIELD3 ....)

:

sqlldr [email protected]/password control='control file location' 
0

- 1 단계 : 임시 테이블을 만듭니다. 테이블 만들기 대금 청구 (TAP_ID char (10), ACCT_NUM char (10));

SELECT * FROM BILLING; 

- 2 단계 : 제어 파일을 만듭니다. 종료 필드 테이블에 결제

로드 데이터 IN_DATA.txt INFILE 를 ',' (TAP_ID, ACCT_NUM)

- 단계 3 : 입력 데이터 파일을 만든다. IN_DATA.txt 파일 내용 : 100,15678966

- 4 단계 : .. 클라이언트 \ 빈> SQLLDR 사용자 이름 @ DB-sis__id/암호 제어 = 'Billing.ctl'

: 실행에서 명령을 실행
관련 문제