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

Sao chép dữ liệu từ tệp vào CLOB trong Oracle

Sao chép dữ liệu từ tệp vào CLOB trong Oracle

Thủ tục copy_file_data_to_clob () sau đây cho biết cách đọc văn bản từ một tệp và
lưu trữ nó trong CLOB:
TẠO QUY TRÌNH copy_file_data_to_clob (
p_clob_id INTEGER,
p_directory VARCHAR2,
> p_file_name VARCHAR2
) AS
v_file UTL_FILE.FILE_TYPE;
v_chars_read INTEGER;
v_dest_clob CLOB;
v_amount INTEGER:=32767;
v_char_buffer VARCHAR2 (32767 );
BEGIN
- chèn CLOB
INSERT rỗng VÀO clob_content (
id, clob_column
) VALUES (
p_clob_id, EMPTY_CLOB ()
);
- lấy bộ định vị LOB của CLOB
SELECT clob_column
INTO v_dest_clob
FROM clob_content
WHERE id =p_clob_id
FOR UPDATE;
- mở tệp để đọc văn bản (tối đa v_ số lượng ký tự trên mỗi dòng)
v_file:=UTL_FILE.FOPEN (p_directory, p_file_name, 'r', v_amount);
- sao chép dữ liệu từ tệp vào v_dest_clob từng dòng một
LOOP
BEGIN
- đọc một dòng từ tệp vào v_char_buffer;
- G ET_LINE () không sao chép ký tự dòng mới vào
- v_char_buffer
UTL_FILE.GET_LINE (v_file, v_char_buffer);
v_chars_read:=LENGTH (v_char_buffer);
- chắp thêm dòng tới v_dest_clob
DBMS_LOB.WRITEAPPEND (v_dest_clob, v_chars_read, v_char_buffer);
- thêm một dòng mới vào v_dest_clob vì v_char_buffer;
- giá trị ASCII cho dòng mới là 10, do đó CHR (10 ) trả về dòng mới
DBMS_LOB.WRITEAPPEND (v_dest_clob, 1, CHR (10));
EXCEPTION
- khi không còn dữ liệu trong tệp thì thoát ra
KHI KHÔNG CÓ_DATA_FOUND THÌ
EXIT;
END;
END LOOP;
- đóng tệp
UTL_FILE.FCLOSE (v_file);
DBMS_OUTPUT.PUT_LINE ('Sao chép thành công đã hoàn thành. ');
HẾT bản sao_tập_dữ_liệu_to_cấp;
/

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kiểm tra xem đó có phải là một hàm số trong Oracle không

  2. Điều chỉnh hiệu suất PL / SQL cho các truy vấn ký tự đại diện LIKE '% ...%'

  3. Cách ghi vào tệp CSV bằng Oracle SQL * Plus

  4. Cách sử dụng kiểu BOOLEAN trong câu lệnh SELECT

  5. Có một pragma PL / SQL tương tự như DETERMINISTIC, nhưng cho phạm vi của một SQL SELECT duy nhất không?