查了一天的blob,还是没理解到,我想在VC下存取二进制的文件,使用的是oo4o,照着帮助文档上面的写了写入数据库的代码,还是没写对,错误提示是this operation is not permitted on a empty LOB,这是什么意思啊?照着示例代码写都不对呢?我还想问的是能不能在sqlplus下面用insert插入这类型的数据呢?如果可以怎么写呢?谢谢,请高手指教!
调试欢乐多
好像用java操作大对象前先要插入一个oracle的empty类型,然后再对其进行修改,并且要查询出先前插入的empty记录,并锁定该行,然后再插入lob。
获取文本 DBMS_LOB.SUBSTR(col1,n,pos)
如DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节
create or replace package body plan_fileUntil is
function downLoadFile(uuid varchar2, filePath varchar2,fileName varchar2) return integer is
/* *******************************************************************************************
--功 能:从Oracle中下载文件
--输入参数:
uuid:文件唯一UUID ,bfile_path--下载文件存放的全路径目录,如“F:/temp", fileName:下载后文件名称
--输出参数: 文件下载是否成功 path varchar2(20) := 'cjsbfile_path';/*目录名称*/
directoryNum int;
tmpSql varchar2(2000);
blob_loc BLOB;
handle UTL_FILE.file_type;
fileLength int;
l_pos INTEGER := 1;
l_amount BINARY_INTEGER := 32767;
l_buffer RAW(32767);
begin
select filecontent into blob_loc from plan_files where uuid=id;
fileLength:=dbms_lob.getlength(blob_loc);
handle:=utl_file.fopen(upper(path),filename,'wb',32767);
WHILE l_pos < fileLength LOOP
dbms_lob.READ (blob_loc, l_amount, l_pos, l_buffer);
UTL_FILE.PUT_RAW(handle, l_buffer, TRUE);
l_pos := l_pos + l_amount;
END LOOP;
utl_file.fclose(handle);
return 1;
exception /*如果发生异常*/
WHEN OTHERS THEN
IF UTL_FILE.IS_OPEN(handle) THEN/*关闭文件*/
UTL_FILE.FCLOSE(handle);
END IF;
execute immediate 'drop directory ' || path;/*删除已经创建的目录*/
return 0;/*失败*/
end;