Oracle - Tự động xuất / dỡ dữ liệu


7

Oracle SQL Developer có một tùy chọn để xuất nội dung của kết quả truy vấn sang các định dạng khác nhau (CSV / chiều rộng cố định / Excel / XML). Có cách nào để tự động hóa nó?

Nếu không, những công cụ miễn phí nào có sẵn sẽ cho phép tôi tự động hóa xuất thành các định dạng tương tự mà SQL Developer có khả năng xuất sang?

Câu trả lời:


8

Có nhiều cách để xuất dữ liệu từ Oracle và tự động hóa chức năng. Hãy chắc chắn để hiểu chính xác những gì xuất khẩu dữ liệu đang được sử dụng cho, mặc dù. Nếu nó là để xen kẽ giữa các hệ thống, thì xuất theo định dạng mà hệ thống nhận của bạn có thể hiểu. Nếu nó dành cho mục đích sao lưu, hãy sử dụng phương thức exp / expdp (bơm dữ liệu) vì sao lưu cơ sở dữ liệu cần lưu trữ nhiều hơn là dữ liệu đơn giản. (Tốt hơn hết, chỉ cần sử dụng RMAN. Nhưng tôi biết nhiều DBA cũng thích xuất khẩu db đầy đủ một cách thường xuyên.)

Bạn có thể sử dụng một số công cụ để thực hiện điều này, TOAD là công cụ gây chú ý. Nó có một công cụ xuất dữ liệu mạnh mẽ hỗ trợ lập lịch. Có một phiên bản miễn phí, nhưng tôi không chắc nó có chức năng lập lịch hay không. Đáng để thử, mặc dù.

Hoặc, sử dụng các công cụ đã có sẵn cho bạn: SQL * PLUS, PL / SQL và cron (hoặc Bộ lập lịch Windows nếu bạn chạy Windows). Để biết ví dụ hay về cách viết thói quen PL / SQL xuất bảng sang tệp CSV, hãy xem http: //asktom.oracle.com/pls/asktom/f? P = 100: 11: 0 ::::: p11_question_id: 88212348059 . Nếu bạn sử dụng một thủ tục, bạn có thể lên lịch cho nó từ bộ lập lịch công việc của riêng Oracle.

Bạn cũng có thể làm những điều tương tự hoàn toàn với SQL * PLUS (mà không cần viết thủ tục), nhưng nó không hoàn toàn linh hoạt, nhưng với những gì bạn muốn, nó có thể chỉ là những gì bạn cần. SQL * PLUS cũng có thể dễ dàng tạo tập lệnh để bạn có thể gọi nó bất cứ khi nào bạn muốn thông qua cron / Windows Lập lịch.

SQL * PLUS tự hoạt động thực sự tốt để tạo các báo cáo có độ rộng cố định tốt, nhưng cũng có thể thực hiện HTML và CSV. XML có thể sẽ yêu cầu một quy trình sắp xếp nào đó, nhưng tôi không xuất khẩu ở đây, vì vậy SQL * PLUS có thể không hoàn hảo ở đây ( tuy nhiên, nó sẽ xuất ra HTML, do đó có thể đủ tốt). Nếu xuất sang Excel, hãy nhớ rằng các phiên bản hiện tại sử dụng XML làm định dạng tệp của chúng, điều này làm cho mọi thứ trở nên dễ dàng (theo một cách) và đau đớn theo những cách khác (như cần biết trước bạn sẽ có bao nhiêu hàng trong tệp đầu ra ).

Bất kể, với một chút công việc và sự kết hợp của hai hoặc ba công cụ, bạn sẽ có thể xuất dữ liệu của mình theo bất kỳ định dạng nào bạn muốn theo bất kỳ lịch trình nào bạn muốn.

Mong rằng sẽ giúp.


-1
/** **/
DECLARE
   lfFilelog UTL_FILE.FILE_TYPE;

   lspath varchar2(50) := 'c:\';
   lsfile varchar2(50) := 'file';
BEGIN
   lfFilelog := UTL_FILE.FOPEN(lspath,lsfile||'.txt','w');

   FOR r IN (SELECT FROM table) LOOP
      UTL_FILE.PUT_LINE(lfFilelog ,r.row);
   END LOOP;

   UTL_FILE.FCLOSE_ALL;
EXCEPTION
   WHEN UTL_FILE.INVALID_OPERATION THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.PUT_LINE(lfFilelog,' Invalid File open Operation');
      UTL_FILE.FCLOSE_ALL;
      RAISE_APPLICATION_ERROR(-20051,'Invalid File open Operation');

   WHEN UTL_FILE.INVALID_FILEHANDLE THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.PUT_LINE(lfFilelog,' Invalid File Name');
      UTL_FILE.FCLOSE_ALL;
      RAISE_APPLICATION_ERROR(-20052,'Invalid File Name');

   WHEN UTL_FILE.READ_ERROR THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.PUT_LINE(lfFilelog,' Read Error');
      UTL_FILE.FCLOSE_ALL;
      RAISE_APPLICATION_ERROR(-20053,'Read Error');

   WHEN OTHERS THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.FCLOSE_ALL;
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      ROLLBACK;
END;

2
Chỉ muốn làm rõ rằng sintax "r.row" được định nghĩa trong câu lệnh trên UTL_FILE.PUT_LINE (lfFilelog, r.row); lần trước tôi kiểm tra, không được hỗ trợ trong oracle 8i, 9i, 10g và 11.2.0.1

2
-1 SELECT FROM tablekhông phải là một tuyên bố sql hợp lệ. r.rowchỉ hoạt động nếu danh sách chọn của truy vấn có chứa một tên được đặt tên row. Trong hầu hết các trường hợp, bạn muốn xuất nhiều hơn một cột. Sẽ không có nghĩa khi bắt lỗi gây ra bằng cách mở hoặc ghi vào tệp và cố gắng viết thông báo lỗi trong cùng một tệp. Điều này sẽ đưa ra một ngoại lệ khác và file_c Đóng, dbmsDefput_put_line và grow_error sẽ không được thực thi.
phép lạ173
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.