Pl/SQL写二进制文件 现想从test表中取一blob字段值,写入二进制文件中,在存储过程中咋么实现。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SQL> conn / as sysdba已连接。SQL> create or replace directory BLOBDIR as 'd:\oracle\bfile';目录已创建。SQL> grant read,write on directory BLOBDIR to test;授权成功。 conn test/testCREATE OR REPLACE PROCEDURE iihero_dump_blob(piname varchar2,poname varchar2) IS l_file UTL_FILE.FILE_TYPE; l_buffer RAW(32767); l_amount BINARY_INTEGER := 32767; l_pos INTEGER := 1; l_blob BLOB; l_blob_len INTEGER;BEGIN SELECT f INTO l_blob FROM iihero_blob WHERE FNAME = piname; l_blob_len := DBMS_LOB.GETLENGTH(l_blob); l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767); WHILE l_pos < l_blob_len LOOP 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; END LOOP; UTL_FILE.FCLOSE(l_file);EXCEPTION WHEN OTHERS THEN IF UTL_FILE.IS_OPEN(l_file) THEN UTL_FILE.FCLOSE(l_file); END IF; RAISE;END;/exec iihero_dump_blob('ttt.txt', 'ttt_out.txt')即把对应于文件名为ttt.txt的blob值导出到文件ttt_out.txt当中。 再更正一下,上边的 l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767); 中的'wb'应该改为'w' 参考:http://topic.csdn.net/t/20021216/17/1266283.html 写一个FUNCTION 或者存储过程,关于几张表的查询 有点难度,大家帮忙 帮忙做一个数据库升级配置 谁有ORACLE portal的相关资料? 求教:如何通过查询Oracle系统表,查询表的属性? 求一条SQL语句。半天想不出来,汗~~~~~~~ ora-12514监听进程不能解析连接串中的servicename (这个问题困扰我一上午了) .net连接oracle 不能执行execute immediate,是版本问题吗?紧急求助! 为什么监听器总是启动不了?和操作系统有关吗? oracle中遇到的棘手问题! 各位帮忙看一下这块错在哪里了??? 一条INSERT INTO语句的错误
已连接。
SQL> create or replace directory BLOBDIR as 'd:\oracle\bfile';
目录已创建。
SQL> grant read,write on directory BLOBDIR to test;
授权成功。 conn test/testCREATE OR REPLACE PROCEDURE iihero_dump_blob(piname varchar2,poname varchar2) IS
l_file UTL_FILE.FILE_TYPE;
l_buffer RAW(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_blob BLOB;
l_blob_len INTEGER;
BEGIN
SELECT f INTO l_blob FROM iihero_blob WHERE FNAME = piname;
l_blob_len := DBMS_LOB.GETLENGTH(l_blob);
l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767); WHILE l_pos < l_blob_len LOOP
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;
END LOOP; UTL_FILE.FCLOSE(l_file);EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.IS_OPEN(l_file) THEN
UTL_FILE.FCLOSE(l_file);
END IF;
RAISE;
END;
/
exec iihero_dump_blob('ttt.txt', 'ttt_out.txt')即把对应于文件名为ttt.txt的blob值导出到文件ttt_out.txt当中。
l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767);
中的'wb'应该改为'w'