我正在尝试查看在 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; 结尾;
有人可以帮我解决我哪里出错了。
这取决于您希望在数据库中查看以 BLOB 形式保存的 pdf 文件的位置和方式:
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;