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

Chèn chuỗi kiểm tra BLOB lớn hơn 2000 hoặc 4000 byte

Để bắt đầu, bạn cần hiểu LOB là gì. Chúng là "dữ liệu lớn", có thể lớn hơn bất kỳ kiểu dữ liệu nào khác trong Oracle. Chúng giống như các tệp thông thường trên hệ thống tệp. Để ghi vào một tệp trên một mục tệp, bạn sẽ phải

  1. mở tệp để ghi
  2. cắt bớt tệp nếu bạn muốn bắt đầu điền từ đầu
  3. đọc dữ liệu nguồn của bạn thành nhiều phần trong một vòng lặp
  4. nối các phần dữ liệu của bạn vào tệp trong cùng một vòng lặp, từng phần một
  5. đóng tệp

Ít nhiều điều tương tự cũng đúng đối với LOB. Trong bảng của bạn, cột LOB (CLOB / BLOB / NCLOB) chỉ là một con trỏ / tham chiếu đến một vị trí khác trên ổ đĩa lưu trữ dữ liệu thực tế của bạn. Theo thuật ngữ tiêu chuẩn của Oracle, con trỏ được gọi là "LOB locator". Bạn cần phải

  1. mở / khởi tạo bộ định vị LOB
  2. cắt bớt nội dung LOB, nếu bạn muốn bắt đầu điền từ đầu
  3. nối các phần dữ liệu của bạn vào nội dung LOB trong một vòng lặp, từng phần một
  4. đóng bộ định vị LOB

Trong PL / SQL, nó có thể trông như thế này:

-- create table blob_test(id number, b blob);

declare 
  v_b blob; 
  aaa raw(32767);
  longLine varchar2(32767);
begin 
  longLine :=  LPAD('aaaa', 32767,'x');
  aaa := UTL_RAW.CAST_TO_RAW(longLine);
  insert into blob_test values(1,empty_blob()) returning b into v_b;
  dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  dbms_lob.writeappend(v_b,UTL_RAW.LENGTH (aaa) ,aaa);
  dbms_lob.close(LOB_LOC=>v_b);
  commit;
end;

Giải thích:

  1. khởi tạo bộ định vị LOB =insert into blob_test values(1,empty_blob()) returning b into v_b;
  2. mở trình định vị LOB để ghi =dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  3. cắt bớt nội dung LOB, nếu bạn muốn bắt đầu điền từ đầu ... Việc này được thực hiện bởi empty_blob() gọi trong insert .
  4. nối các phần dữ liệu của bạn vào nội dung LOB trong một vòng lặp, từng cái một =ở đây chỉ một lần lặp lại của dbms_lob.writeappend() , chỉ thêm một đoạn duy nhất aaa of length utl_raw.length(aaa) (tối đa là 32767) vào LOB v_b
  5. đóng bộ định vị LOB =dbms_lob.close(LOB_LOC=>v_b);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kiểm tra thống kê cũ

  2. Oracle tạo liên kết db bằng lược đồ proxy

  3. Cách xác định các lược đồ bên trong tệp Xuất dữ liệu bơm dữ liệu của Oracle

  4. Chuyển đổi dữ liệu Oracle CLOB thành chuỗi trong c #

  5. Cách thanh lịch để trả về 'kích thước tệp' có thể đọc được của tệp được lưu trữ trong cột oracle blob bằng cách sử dụng SQL là gì?