我正在尝试提取BLOB
数据并将其转换为原始文件(pdf,rtf,doc等)。以下是我的代码:
DECLARE
l_file UTL_FILE.FILE_TYPE;
l_buffer RAW(32767);
l_amount BINARY_INTEGER := 32767;
l_pos NUMBER := 1;
l_blob BLOB;
l_blob_len NUMBER;
BEGIN
SELECT file_contents
INTO l_blob
FROM irb_files
WHERE FILE_NAME = 'STD_FlipBook_Religion2013.doc';
l_blob_len := DBMS_LOB.getlength(l_blob);
-- Open the destination file.
l_file := UTL_FILE.fopen('IRB','STD_FlipBook_Religion2013.doc','wb','W');
DBMS_LOB.read(l_blob, l_amount, l_pos, l_buffer);
UTL_FILE.put_raw(l_file, l_buffer, TRUE);
l_pos := l_pos + l_amount;
-- Close the file.
UTL_FILE.fclose(l_file);
END;
我对所有这些都比较新,所以如果我的代码有点偏,我很抱歉。我一直得到的错误是:
Error report:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 18
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause:
*Action:
非常感谢任何帮助。
数据库信息: Oracle9i企业版9.2.0.5.0版
答案 0 :(得分:2)
问题在于这一行:
l_file := UTL_FILE.fopen('IRB','STD_FlipBook_Religion2013.doc','wb','W');
文档显示下面函数的签名。你拥有的最后一个参数'W'对应于'max_linesize',它应该是一个数字。因此,您无法将“W”转换为数字。我认为你可以简单地使用你的情况下的默认值,所以只需删除'W'参数。
(来自Oracle 9.2文档)
FOPEN功能 此功能打开一个文件。您可以指定最大行大小,并且最多同时打开50个文件。另请参见“FOPEN_NCHAR函数”。
语法 UTL_FILE.FOPEN( 位置IN VARCHAR2, filename IN VARCHAR2, open_mode IN VARCHAR2, max_linesize IN BINARY_INTEGER) RETURN file_type;
参数 表95-3 FOPEN功能参数 参数说明 地点 文件的目录位置。
文件名 文件名,包括扩展名(文件类型),没有目录路径。在Unix中,文件名不能以/.
结尾open_mode 指定文件的打开方式。模式包括:
r - 阅读文字
w - 写文字
a - 追加文字
如果尝试使用open_mode的值打开不存在的文件,则以写入模式创建文件。
max_linesize 此文件的每行最大字符数,包括换行符。 (最小值1,最大值32767)。默认值约为1000字节。