- CREATE OR REPLACE PROCEDURE CLOB2FILE (
- clob_in IN CLOB,
- directory_name IN VARCHAR2,
- file_name IN VARCHAR2
- )
- IS
- file_handle UTL_FILE.FILE_TYPE;
- clob_part VARCHAR2(1024);
- clob_length NUMBER;
- offset NUMBER := 1;
- BEGIN
- clob_length := LENGTH(clob_in);
- file_handle := UTL_FILE.FOPEN(directory_name, file_name, 'W');
- LOOP
- EXIT WHEN offset >= clob_length;
- clob_part := DBMS_LOB.SUBSTR (clob_in, 1024, offset);
- UTL_FILE.PUT_LINE(file_handle, clob_part, FALSE);
- offset := offset + 1024;
- END LOOP;
- UTL_FILE.FFLUSH(file_handle);
- UTL_FILE.FCLOSE(file_handle);
- EXCEPTION
- WHEN OTHERS THEN
- UTL_FILE.FCLOSE(file_handle);
- RAISE;
- END;
複製代碼 ifs clob data to os file
CREATE DIRECTORY MY_DIR AS 'C:\temp';
- create or replace procedure SAVE_TO_FILE_FILE
- IS
- l_blob CLOB;
- --CURSOR C1 IS SELECT data From XML_REPORT_DATA_TAB Where result_key = 1 ;
- BEGIN
- SELECT data INTO l_blob FROM XML_REPORT_DATA_TAB Where result_key = 1;
- clob2file(l_blob,'MY_DIR','utlfile.txt');
- end SAVE_TO_FILE_FILE;
複製代碼 c:/temp/utlfile.txt contents as below (as a example)
<?xml version="1.0" encoding="UTF-8"?>
<BranchTrack xmlns="urn:GEINV:eInvoiceMessage:E0401:3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:GEINV:eInvoiceMessage:E0401:3.1 E0401.xsd">
<Main>
<HeadBan>00008000</HeadBan>
<BranchBan>00008000</BranchBan>
<InvoiceType>02</InvoiceType>
<YearMonth>10212</YearMonth>
<InvoiceTrack>YB</InvoiceTrack>
<InvoiceBeginNo>00001000</InvoiceBeginNo>
<InvoiceEndNo>00001249</InvoiceEndNo>
</Main>
<Details>
<BranchTrackItem>
<InvoiceBeginNo>00001000</InvoiceBeginNo>
<InvoiceEndNo>00001249</InvoiceEndNo>
<InvoiceBooklet>5</InvoiceBooklet>
</BranchTrackItem>
</Details>
</BranchTrack>
as the maximum length of the clob field exceeds the limit 32767 then exec clob2file(l_blob,'MY_DIR','utlfile.txt') will caused error
clob2file(l_blob,'MY_DIR','utlfile.txt') need to changed by using
DBMS_XSLPROCESSOR.clob2file(l_blob,'MY_DIR','utlfile.txt') as instead.
- create or replace procedure SAVE_TO_FILE_FILE
- IS
- l_blob CLOB;
- BEGIN
- SELECT data INTO l_blob FROM XML_REPORT_DATA_TAB Where result_key = 7013;
- DBMS_XSLPROCESSOR.clob2file(l_blob,'MY_DIR','utlfile.txt');
- end SAVE_TO_FILE_FILE;
複製代碼- API Specification:
- DBMS_XSLPROCESSOR.CLOB2FILE(
- cl IN CLOB,
- flocation IN VARCHAR2,
- fname IN VARCHAR2,
- CSID IN NUMBER:=0);
- Script:
- SET SERVEROUTPUT ON:
- DECLARE
- -- CLOB data
- lv_clob CLOB DEFAULT 'This is a example testing by SHAREORACLEAPPS';
- -- Database directory for a physical location
- lv_utl_file_directory VARCHAR2 (100) DEFAULT 'TEST_DB_DIRECTORY';
- -- Output Filename
- lv_file_name VARCHAR2 (100) DEFAULT 'TESTFILE.txt';
- BEGIN
- DBMS_XSLPROCESSOR.clob2file (lv_clob,
- lv_utl_file_directory,
- lv_file_name
- );
- EXCEPTION
- WHEN OTHERS
- THEN
- DBMS_OUTPUT.put_line ('Error :' || SQLERRM);
- END;
複製代碼
|