如何查看 Oracle DB 中保存为 BLOB 数据类型的 PDF 文件

问题描述 投票:0回答:1

我正在尝试查看在 Oracle DB 上保存为 BLOB 数据的 PDF 文件。

以下是我在 Google 的帮助下到目前为止可以取得进展的功能。

 创建或替换 FUNCTION CONCAT_BLOB_EXT_DOC (MRECID NUMBER)
    返回 XML 类型
    是
      v_clob CLOB;
      v_xml XMLTYPE;
      p_pdf BLOB;
    开始
      从表名中选择 blob_filed 到 p_pdf,其中 id = MRECID;
      DBMS_LOB.createtemporary(v_clob, TRUE);
      DBMS_LOB.open(v_clob, DBMS_LOB.lob_readwrite);
      ctx_doc.ifilter(p_pdf, v_clob);
      DBMS_LOB.close(v_clob);
      v_xml := xmltype(REGEXP_REPLACE(v_clob, ']+>'));
      DBMS_LOB.freetemporary(v_clob);
    返回 v_xml;
    结尾;

有人可以帮我解决我哪里出错了。

oracle pdf blob
1个回答
0
投票

这取决于您希望在数据库中查看以 BLOB 形式保存的 pdf 文件的位置和方式:

  1. 使用 SQL Developer
  1. APEX 区域内
  1. 将其另存为文件
  • 您需要 db 中的目录对象
  • 您需要访问目录对象的文件夹才能打开文件
    下面是将 blob 保存到文件的代码:
Function BLOB2FILE (mBLOB BLOB, mDir VARCHAR2, mFile VARCHAR2) RETURN VarChar2
IS
BEGIN
  Declare
    utlFile       UTL_FILE.FILE_TYPE;
    utlBuffer     RAW(32767);
    utlAmount     BINARY_INTEGER := 32767;
    utlPos        INTEGER := 1;
    utlBlobLen    INTEGER;
    mRet          VarChar2(100);
  Begin
    utlBlobLen := DBMS_LOB.GetLength(mBLOB);
    utlFile := UTL_FILE.FOPEN(mDir, mFile,'wb', 32767);
--
    WHILE utlPos <= utlBlobLen LOOP
      DBMS_LOB.READ(mBLOB, utlAmount, utlPos, utlBuffer);
      UTL_FILE.PUT_RAW(utlFile, utlBuffer, TRUE);
      utlPos := utlPos + utlAmount;
    END LOOP;
--
    UTL_FILE.FCLOSE(utlFile);
    mRet := 'OK - file created' || mFile;
    RETURN mRet;
  Exception
    WHEN OTHERS THEN
      IF UTL_FILE.IS_OPEN(utlFile) THEN
        UTL_FILE.FCLOSE(utlFile);
      END IF;
      mRet := 'ERR - BLOB2FILE error message  ' || Chr(10) || SQLERRM;
      RETURN mRet;
  End;
END BLOB2FILE;
© www.soinside.com 2019 - 2024. All rights reserved.