Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để lưu BLOB dưới dạng tệp trong PL / SQL?

Ở đây tôi đang đưa ra một ví dụ để lưu dữ liệu BLOB dưới dạng tệp trong PL / SQL. Dữ liệu BLOB bạn có thể lấy từ bảng có cột BLOB hoặc bạn có thể lấy từ tệp trên đĩa.

Ví dụ về hàm PL / SQL để lưu BLOB dưới dạng tệp

Quy trình dưới đây có ba đối số sau:

  1. Tên đối tượng thư mục Oracle (như i_dir).
  2. Lưu dưới dạng tên tệp (dưới dạng i_file).
  3. Dữ liệu BLOB (dưới dạng i_blob).
CREATE OR REPLACE PROCEDURE blob_to_file (i_dir    IN VARCHAR2,
                                          i_file   IN VARCHAR2,
                                          i_blob   IN BLOB)
AS
   l_file       UTL_FILE.file_type;
   l_buffer     RAW (32767);
   l_amount     BINARY_INTEGER := 32767;
   l_pos        INTEGER := 1;
   l_blob_len   INTEGER;
BEGIN
   l_blob_len := DBMS_LOB.getlength (i_blob);

   l_file :=
      UTL_FILE.fopen (i_dir,
                      i_file,
                      'WB',
                      32767);

   WHILE l_pos < l_blob_len
   LOOP
      DBMS_LOB.read (i_blob,
                     l_amount,
                     l_pos,
                     l_buffer);
      UTL_FILE.put_raw (l_file, l_buffer, TRUE);
      l_pos := l_pos + l_amount;
   END LOOP;

   UTL_FILE.fclose (l_file);
EXCEPTION
   WHEN OTHERS
   THEN
      IF UTL_FILE.is_open (l_file)
      THEN
         UTL_FILE.fclose (l_file);
      END IF;

      RAISE;
END blob_to_file;

Kiểm tra

Khối PL / SQL sau sẽ gọi quy trình trên bằng cách chuyển đối tượng thư mục Oracle, tên tệp và dữ liệu BLOB. Đối với dữ liệu BLOB, tôi đang sử dụng hàm GET_BLOB mà tôi đã đưa ra một ví dụ trong bài đăng blog trước của mình:Lấy BLOB từ một tệp trong PL / SQL. Trong trường hợp dưới đây, nó sẽ lấy dữ liệu BLOB từ tệp myfile.jpg từ vị trí MY_DIR và sẽ lưu vào tệp abc.jpg ở vị trí IMG_DIR.

DECLARE
   f_blob   BLOB;
BEGIN
   /* check the above mentioned link for get_blob function example */
   f_blob := get_blob ('MY_DIR', 'myfile.jpg');
   /* now pass the blob to blob_to_file procedure to save it as a file */
   blob_to_file ('IMG_DIR', 'abc.jpg', f_blob);
END;

Bây giờ bạn có thể kiểm tra vị trí của thư mục IMG_DIR cho tệp được tạo thông qua BLOB.

Xem thêm:

  • Cách tạo một đối tượng thư mục Oracle?
  • Tìm hiểu cách trích xuất dữ liệu BLOB từ Bảng Oracle bằng Toad
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi đăng nhập Sqlplus khi sử dụng các biến bash:SP2-0306:Tùy chọn không hợp lệ

  2. Đọc và nhập tệp CSV trong Oracle PL / SQL một cách hiệu quả

  3. ORA-01031:không đủ đặc quyền khi chọn chế độ xem

  4. Cách xem câu lệnh Oracle SQL thực đang được thực thi

  5. Cách in nhiều báo cáo có mã vạch \ hoặc nhiều mã vạch trong một báo cáo