設為首頁收藏本站

艾歐踢論壇

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

搜索
熱搜: 活動 交友 discuz
查看: 746|回復: 0
打印 上一主題 下一主題

to wrinting clob data to os file(clob2file)

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2017-3-11 03:32:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. CREATE OR REPLACE PROCEDURE CLOB2FILE (
  2. clob_in IN CLOB,
  3. directory_name IN VARCHAR2,
  4. file_name IN VARCHAR2
  5. )
  6. IS
  7. file_handle UTL_FILE.FILE_TYPE;
  8. clob_part VARCHAR2(1024);
  9. clob_length NUMBER;
  10. offset NUMBER := 1;
  11. BEGIN
  12. clob_length := LENGTH(clob_in);
  13. file_handle := UTL_FILE.FOPEN(directory_name, file_name, 'W');
  14. LOOP
  15.      EXIT WHEN offset >= clob_length;
  16.      clob_part := DBMS_LOB.SUBSTR (clob_in, 1024, offset);
  17.      UTL_FILE.PUT_LINE(file_handle, clob_part, FALSE);
  18.      offset := offset + 1024;
  19. END LOOP;
  20. UTL_FILE.FFLUSH(file_handle);
  21. UTL_FILE.FCLOSE(file_handle);
  22. EXCEPTION
  23. WHEN OTHERS THEN
  24.      UTL_FILE.FCLOSE(file_handle);
  25.      RAISE;
  26. END;
複製代碼
ifs clob data to os file
CREATE DIRECTORY MY_DIR AS 'C:\temp';

  1. create or replace procedure SAVE_TO_FILE_FILE
  2. IS

  3. l_blob CLOB;
  4. --CURSOR C1 IS SELECT data From  XML_REPORT_DATA_TAB  Where result_key = 1  ;

  5. BEGIN

  6. SELECT data INTO l_blob FROM XML_REPORT_DATA_TAB  Where result_key = 1;

  7.   clob2file(l_blob,'MY_DIR','utlfile.txt');

  8. 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.
  1. create or replace procedure SAVE_TO_FILE_FILE
  2. IS

  3. l_blob CLOB;
  4. BEGIN

  5. SELECT data INTO l_blob FROM XML_REPORT_DATA_TAB  Where result_key = 7013;

  6. DBMS_XSLPROCESSOR.clob2file(l_blob,'MY_DIR','utlfile.txt');
  7. end SAVE_TO_FILE_FILE;
複製代碼
  1. API Specification:

  2. DBMS_XSLPROCESSOR.CLOB2FILE(
  3.       cl          IN  CLOB,
  4.       flocation   IN  VARCHAR2,
  5.       fname       IN  VARCHAR2,
  6.       CSID        IN  NUMBER:=0);

  7. Script:

  8. SET SERVEROUTPUT ON:
  9. DECLARE
  10.    -- CLOB data
  11.    lv_clob  CLOB   DEFAULT 'This is a example testing by SHAREORACLEAPPS';
  12.    -- Database directory for a physical location
  13.    lv_utl_file_directory   VARCHAR2 (100) DEFAULT 'TEST_DB_DIRECTORY';
  14.    -- Output Filename                           
  15.    lv_file_name        VARCHAR2 (100) DEFAULT 'TESTFILE.txt';
  16. BEGIN
  17.    DBMS_XSLPROCESSOR.clob2file (lv_clob,
  18.                                 lv_utl_file_directory,
  19.                                 lv_file_name
  20.                                );
  21. EXCEPTION
  22.    WHEN OTHERS
  23.    THEN
  24.       DBMS_OUTPUT.put_line ('Error :' || SQLERRM);
  25. END;
複製代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 轉播轉播 分享分享 分享淘帖
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|Archiver|手機版|艾歐踢創新工坊    

GMT+8, 2024-6-12 06:16 , Processed in 0.227197 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表