2009-12-23 5 views
7

ID 및 다른 여러 열이 포함 된 CSV 파일이 있습니다. ID가 행을 식별하는 오라클 테이블도 있습니다. 다른 열을 원래대로 유지하면서 테이블의 값을 CSV 파일의 값으로 대체하는 가장 좋은 방법은 무엇입니까?CSV 파일의 값으로 Oracle 테이블을 업데이트하십시오.

이것은 오라클 자체에서 사용할 수있는 도구 (예 : PL/SQL 또는 SQL 스크립트)로 수행해야하며 "실제"스크립팅 언어 (Python, ...) 또는 "실제"프로그램을 사용할 수 없습니다.

덕분에, 오라클 문서에서 외부 테이블에서 토마스

답변

10

봐. csv 파일을 Oracle 서버 상자에 복사하고 Oracle에서 쿼리를 실행할 수있는 "일반"테이블로 제공 할 수 있습니다.

그런 다음 문제는 하나의 테이블에서 다른 테이블로 데이터를 복사하는 중 하나가됩니다.

외부 테이블은 이와 같은 데이터로드를 처리하는 데 매우 유용합니다.

+0

+1 작동합니다 생각을 작성합니다. * EXTERNAL TABLE *이 키입니다. 데이터로드에 대해서는 http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch11.htm#1007030을 확인하십시오. – Guru

1

또 다른 옵션은 파일을 한 행씩 읽고, REGEXP_REPLACE와 같은 것을 사용하여 줄의 필드를 구문 분석하고 적절한 행을 업데이트하는 것입니다. 당신은 다음과 같이 쉼표로 구분 된 문자열을 구문 분석 할 수 있습니다 귀하의 사이트가 외부 테이블의 사용을 허용하지 않는 경우에 유용

SELECT TRIM(REGEXP_REPLACE(strLine, '(.*),.*,.*', '\1')), 
     TRIM(REGEXP_REPLACE(strLine, '.*,(.*),.*', '\1')), 
     TRIM(REGEXP_REPLACE(strLine, '.*,.*,(.*)', '\1')) 
    INTO strID, strField1, strField2  FROM DUAL; 

.

공유하고 즐기십시오.

5

CSV 유형 데이터 파일을 데이터베이스에로드하는 "표준"Oracle 도구는 SQLLoader입니다. 일반적으로 레코드를 삽입하는 데 사용되지만 컨트롤 파일을 업데이트를 실행하도록 구성 할 수 있습니다 (원하는 경우 해당하는 경우).

세계에서 사용하기 가장 쉬운 도구는 아니지만 ("엉덩이에 통증"이라고 읽음) 표준 도구 키트의 일부이며 작업을 수행합니다.

+0

외부 테이블도 "표준"이며 SQL- 로더보다 훨씬 유연합니다. 처음에는 데이터를 액세스 할 수 있도록 오라클에 실제로 데이터를로드 할 필요가 없기 때문에 작업이 빠릅니다. 그리고 일반 SQL을 사용할 수있는 방식으로 제공됩니다. – CMG

1

를 사용하여 SQL * 로더

sqlldr [email protected]/password control=load_csv.ctl 

/path/to/mydata.csv 당신이로드하는 데 필요한 CSV 파일의 경로입니다 load_csv.ctl 파일

load data 
infile '/path/to/mydata.csv' 
into table mydatatable 
fields terminated by "," optionally enclosed by '"'   
(empno, empname, sal, deptno) 

, Windows에서 뭔가 같은 C : \ 데이터 \ mydata.csv. tablename은 mydatatable입니다. 열은 마지막 줄의 csv 파일에 나열된 순서대로 나열됩니다.

데이터 양이 매우 큰 경우가 아니면 데이터 을 가져 오는 방법을 유지하는 것이 가장 쉽습니다. 데이터를 정기적으로로드해야하는 경우 이는 셸 스크립트로 작업하고 CRON U * NX 시스템에서.csv로이 ID를

create table t 

다음에 해당하는 테이블을 생성하여

-7

먼저 오라클 테이블을 업데이트하기 위해 커서를 테이블을 만들고 해당 테이블에 모든 CSV 데이터를 넣고, 다음 쓰기 CSV 데이터를이 테이블로 가져옵니다.

이제 커서

declare 
cursor c1 is 
select * from t1; 
begin 
update Oracle table 
set 
t1.Column=t2.column 
where t1.id=t2.id; 

내가 그것을

관련 문제