Wednesday, October 28, 2015
DBMS_CLOB Package usage
Write CLOB data from table to a text file
CREATE OR REPLACE PROCEDURE Write_CLOB_To_XML_File
IS
clob_loc CLOB;
buffer VARCHAR2(32767);
buffer_size CONSTANT BINARY_INTEGER := 32767;
amount BINARY_INTEGER;
offset NUMBER(38);
file_handle UTL_FILE.FILE_TYPE;
directory_name CONSTANT VARCHAR2(80) := 'LOB_LOAD';
new_xml_filename CONSTANT VARCHAR2(80) := '1_out.txt';
BEGIN
DBMS_OUTPUT.ENABLE(100000);
-- ----------------
-- GET CLOB LOCATOR
-- ----------------
SELECT xml_file INTO clob_loc
FROM test_clob
WHERE id = 1001;
-- --------------------------------
-- OPEN NEW XML FILE IN WRITE MODE
-- --------------------------------
file_handle := UTL_FILE.FOPEN(
location => directory_name,
filename => new_xml_filename,
open_mode => 'w',
max_linesize => buffer_size);
amount := buffer_size;
offset := 1;
-- ----------------------------------------------
-- READ FROM CLOB XML / WRITE OUT NEW XML TO DISK
-- ----------------------------------------------
WHILE amount >= buffer_size
LOOP
DBMS_LOB.READ(
lob_loc => clob_loc,
amount => amount,
offset => offset,
buffer => buffer);
offset := offset + amount;
UTL_FILE.PUT(
file => file_handle,
buffer => buffer);
UTL_FILE.FFLUSH(file => file_handle);
END LOOP;
UTL_FILE.FCLOSE(file => file_handle);
END;
/
exec sys.Load_CLOB_From_XML_File
=====================================================================
Loading data from CLOB in table to text file on disk
CREATE OR REPLACE PROCEDURE Write_CLOB_To_XML_File
IS
clob_loc CLOB;
buffer VARCHAR2(32767);
buffer_size CONSTANT BINARY_INTEGER := 32767;
amount BINARY_INTEGER;
offset NUMBER(38);
file_handle UTL_FILE.FILE_TYPE;
directory_name CONSTANT VARCHAR2(80) := 'LOB_LOAD';
new_xml_filename CONSTANT VARCHAR2(80) := '1_out.txt';
BEGIN
DBMS_OUTPUT.ENABLE(100000);
-- ----------------
-- GET CLOB LOCATOR
-- ----------------
SELECT xml_file INTO clob_loc
FROM test_clob
WHERE id = 1001;
-- --------------------------------
-- OPEN NEW XML FILE IN WRITE MODE
-- --------------------------------
file_handle := UTL_FILE.FOPEN(
location => directory_name,
filename => new_xml_filename,
open_mode => 'w',
max_linesize => buffer_size);
amount := buffer_size;
offset := 1;
-- ----------------------------------------------
-- READ FROM CLOB XML / WRITE OUT NEW XML TO DISK
-- ----------------------------------------------
WHILE amount >= buffer_size
LOOP
DBMS_LOB.READ(
lob_loc => clob_loc,
amount => amount,
offset => offset,
buffer => buffer);
offset := offset + amount;
UTL_FILE.PUT(
file => file_handle,
buffer => buffer);
UTL_FILE.FFLUSH(file => file_handle);
END LOOP;
UTL_FILE.FCLOSE(file => file_handle);
END;
/
No comments:
Post a Comment