2009-12-23 34 views
7

Tôi có tệp CSV chứa ID và một số cột khác. Tôi cũng có một bảng trong oracle nơi ID xác định một hàng. Làm thế nào tôi có thể thay thế tốt nhất các giá trị trong bảng với các giá trị trong tệp CSV trong khi vẫn giữ các cột khác theo cách trước đây? Điều này phải được thực hiện với các công cụ có sẵn trong oracle chính nó (tức là các kịch bản PL/SQL hoặc SQL), tôi không thể sử dụng một ngôn ngữ kịch bản "thực" (Python, ...) hoặc chương trình "thực".Cập nhật bảng Oracle với các giá trị từ tệp CSV

Cảm ơn, Thomas

Trả lời

10

Nhìn vào BẢNG EXTERNAL trong Oracle doc. Bạn có thể sao chép tệp csv vào hộp máy chủ Oracle và đưa Oracle trình bày nó dưới dạng bảng "bình thường" mà bạn có thể chạy truy vấn.

Sau đó, sự cố chỉ trở thành một trong số sao chép dữ liệu từ bảng này sang bảng khác.

Bảng bên ngoài thực sự rất hữu ích để xử lý tải dữ liệu như thế này.

+0

1. * BÊN NGOÀI * là chìa khóa. Kiểm tra tại đây http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch11.htm#1007030 để tải dữ liệu. – Guru

1

Một tùy chọn khác là đọc trong tệp theo từng dòng, phân tích các trường trong dòng bằng cách sử dụng một cái gì đó như REGEXP_REPLACE và cập nhật các hàng thích hợp. Bạn có thể phân tích cú pháp chuỗi được phân tách bằng dấu phẩy như sau:

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

Điều này rất hữu ích nếu trang web của bạn không cho phép sử dụng bảng bên ngoài.

Chia sẻ và thưởng thức.

5

Công cụ "chuẩn" Oracle để tải các tệp dữ liệu kiểu CSV vào cơ sở dữ liệu là SQLLoader. Nó thường được sử dụng để chèn các bản ghi, nhưng tập tin điều khiển có thể được cấu hình để chạy một bản cập nhật thay vào đó, nếu đó là những gì bạn mong muốn.

Nó không phải là công cụ dễ nhất trên thế giới để sử dụng (đọc "đó là một nỗi đau trong ass"), nhưng nó là một phần của bộ công cụ tiêu chuẩn, và nó thực hiện công việc.

+0

Bảng ngoài cũng là "chuẩn" và linh hoạt hơn nhiều so với Trình tải SQL. Để bắt đầu, chúng nhanh hơn vì bạn không thực sự phải tải dữ liệu vào Oracle để có thể truy cập được. Và nó được trình bày theo cách bạn có thể sử dụng SQL bình thường trên đó. – CMG

1

Sử dụng SQL * Loader

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

File load_csv.ctl

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

nơi /path/to/mydata.csv là đường dẫn đến tập tin CSV mà bạn cần phải tải , trên Windows, một cái gì đó như C: \ data \ mydata.csv. Tablename là mydatatable. Các cột được liệt kê theo thứ tự mà chúng apear trong tệp csv trên dòng cuối cùng.

Trừ khi bạn có khối lượng dữ liệu rất lớn, đây là cách dễ nhất để duy trì cách nhận dữ liệu in Nếu dữ liệu cần được tải một cách thường xuyên, điều này có thể được làm việc thành tập lệnh shell và chạy bởi CRON trên hệ thống U * NX.

-7

Đầu tiên tạo ra một bảng và đặt tất cả dữ liệu CSV của bạn vào bảng đó, và sau đó viết một con trỏ để cập nhật bảng oracle của bạn với CSV tạo bảng tương ứng với ID

create table t 

và sau đó nhập dữ liệu CSV của bạn vào bảng này.

bây giờ viết một con trỏ

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

tôi nghĩ rằng nó sẽ làm việc

Các vấn đề liên quan