Làm thế nào tôi có thể dỡ các bảng cơ sở dữ liệu Oracle vào một tệp csv?


18

Tôi cần truy xuất một số dữ liệu nhất định từ cơ sở dữ liệu Oracle 11g phát hành 1 và cung cấp dưới dạng một hoặc nhiều tệp CSV. Dữ liệu nằm trong nhiều bảng và / hoặc dạng xem. Tất cả điều này sẽ làm việc thông qua dòng lệnh. Điều gì sẽ là cách tiếp cận tốt nhất cho điều này?

Câu trả lời:


11

Arun

bây giờ sqlcl đã có sẵn từ Oracle SQL Developer 4.1 EA2 (4.1.0.18.37), bạn có thể sử dụng nó rất nhiều như sqlplus cũ và nổi tiếng. sqlcl có cài đặt định dạng đầu ra cho csv

set sqlformat csv
spool x.csv
select * from yourtable[s];
spool off

để biết thêm thông tin về sqlcl checkout Blog của Kris

trước khi sqlcl dễ dàng nhất cho việc này là sử dụng APEX và xuất báo cáo sang csv. Trong sqlplus cũ đơn giản, bạn có thể làm điều này bằng cách sử dụng

set lines 9999 -- the appropriate size
set head off  -- no header lines
set colsep ';' --column separator to ;
set pages 0 -- no pages
set feed off
select your data;
spool to_tofile
/
spool off

Điều này hoạt động tốt nhất nếu kết quả được ghi trên máy chủ ứng dụng hoặc máy khách. Nếu chúng phải được ghi trên máy chủ cơ sở dữ liệu, utl_file có thể là một lựa chọn tốt hơn.

Ronald.


8

Bạn nên xem gói UTL_FILE tích hợp. Có một số cách bạn có thể sử dụng nó.

  1. Bạn có thể viết bất kỳ số lượng thủ tục nào trong các gói sử dụng gói UTL_FILE để ghi vào bất kỳ số lượng tệp nào. Các quy trình này sau đó có thể được gọi từ hầu hết mọi ứng dụng, kể cả SQL * Plus.

  2. Bạn có thể viết một tập lệnh PL / SQL để thực hiện cùng một công việc và gọi tập lệnh từ chính dòng lệnh SQL * Plus bằng cách chỉ định @scriptname trên dòng lệnh.

  3. Bạn có thể dán một khối bằng UTL_FILE trực tiếp vào SQL * Plus, nhưng điều này chỉ nên được sử dụng cho xuất một lần và thậm chí sau đó nó có thể không phải là tuyến tốt nhất.

Trong cách đơn giản nhất, xuất tệp bằng UTL_FILE sẽ bao gồm một cuộc gọi đến FOPEN , một hoặc nhiều cuộc gọi đến PUT_LINE và cuộc gọi đến FCLOSE .


4

Nếu hiệu suất là một mối quan tâm, bạn có thể muốn xem xét các công cụ từ các nhà cung cấp.

Tôi đã đánh giá các công cụ từ BMC, Wisdomforce, CoSort, DBCrane. Tất cả đều nhanh hơn đáng kể so với spool, utl_file hoặc bảng bên ngoài. Chúng tôi đang sử dụng DBCrane vì ông chủ của tôi không muốn chi quá nhiều cho giấy phép.


3

Bạn có thể sử dụng mô-đun Python và cx_Oracle để trích xuất dữ liệu vào đĩa ở định dạng CSV.

Đây là cách bạn kết nối với Oracle bằng cx_Oracle:

constr='scott/tiger@localhost:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

Sau khi tìm nạp dữ liệu, bạn có thể lặp qua danh sách Python và lưu dữ liệu ở định dạng CSV.

for i, chunk in enumerate(chunks(cur)):
    f_out.write('\n'.join([column_delimiter.join(row[0]) for row in chunk]))
    f_out.write('\n')

Tôi đã sử dụng phương pháp này khi tôi viết TableHunter-For-Oracle

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.