BLOB对象的读出,utl_file.put_raw

BLOB对象的读出

http://blog.youkuaiyun.com/wangdeng1314/archive/2010/05/20/5612757.aspx

utl_file.put_raw 可以写二进制文件。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/350519/viewspace-1042143/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/350519/viewspace-1042143/

### Navicat 中使用 Oracle 的 `UTL_FILE.FOPEN` 方法 在 Navicat 中调用 Oracle 的 `UTL_FILE.FOPEN` 函数进行文件操作时,需要确保数据库中已经创建了相应的目录对象,并且当前用户具有对该目录的读写权限。Oracle 提供的 `UTL_FILE` 包用于在服务器端读写操作系统文件,常用于导出数据、生成日志等场景[^1]。 #### 1. 创建目录对象 在使用 `UTL_FILE.FOPEN` 之前,必须先通过 `CREATE OR REPLACE DIRECTORY` 命令创建一个逻辑目录对象,并将其映射到操作系统上的物理路径。例如: ```sql CREATE OR REPLACE DIRECTORY OUT_PATH AS '/home/oracle/backup'; ``` 该语句创建了一个名为 `OUT_PATH` 的目录对象,指向 `/home/oracle/backup` 目录。随后可以通过以下查询确认目录是否已成功创建: ```sql SELECT * FROM ALL_DIRECTORIES; ``` 若未找到相关记录,则需重新执行目录创建语句[^2]。 #### 2. 赋予目录访问权限 创建目录后,还需为当前用户赋予对该目录的读写权限: ```sql GRANT READ, WRITE ON DIRECTORY OUT_PATH TO your_user; ``` 否则即使调用 `UTL_FILE.FOPEN` 成功,也可能因权限不足而无法实际操作文件。 #### 3. 在 Navicat 中调用 UTL_FILE.FOPEN Navicat 支持直接编写 PL/SQL 程序并运行,因此可以直接在 Navicat 的 SQL 编辑器中编写包含 `UTL_FILE.FOPEN` 的过程或匿名块。例如,将表中的 BLOB 数据导出为文件: ```sql DECLARE l_file UTL_FILE.FILE_TYPE; l_buffer RAW(32767); l_amount BINARY_INTEGER := 32767; l_pos INTEGER := 1; l_blob_len INTEGER; CURSOR cur IS SELECT rownum id, CONTENT_ AS t_blob, '文件名' AS t_name FROM BASE_UPLOADFILEBLOB WHERE PATH_ LIKE '%jasper'; BEGIN FOR rec IN cur LOOP l_blob_len := DBMS_LOB.GETLENGTH(rec.t_blob); l_file := UTL_FILE.FOPEN('OUT_PATH', rec.id || '_' || rec.t_name || '.jasper', 'WB', 32767); WHILE l_pos < l_blob_len LOOP IF l_pos + l_amount - 1 > l_blob_len THEN l_amount := l_blob_len - l_pos + 1; END IF; DBMS_LOB.READ(rec.t_blob, l_amount, l_pos, l_buffer); UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE); l_pos := l_pos + l_amount; END LOOP; UTL_FILE.FCLOSE(l_file); END LOOP; END; ``` 上述代码会遍历符合条件的数据行,并将每个 BLOB 字段内容写入指定目录下的 `.jasper` 文件中。注意此处 `'OUT_PATH'` 是前面创建的目录对象名称,应根据实际情况替换[^4]。 #### 4. 注意事项 - **路径有效性**:确保 Oracle 实例运行的操作系统账户对目标路径有写权限。 - **字符集问题**:若导出文本文件,应注意源数据与目标文件编码的一致性。 - **异常处理**:建议在 PL/SQL 块中加入异常捕获逻辑,防止因文件操作失败导致整个程序中断。 - **性能优化**:对于大量数据导出,可适当调整 `l_amount` 大小以提高效率,但不应超过 `UTL_FILE` 的最大缓冲区限制(通常为 32767)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值