日期:2014-05-17  浏览次数:20852 次

bfile类型的使用问题
存完后,表中 fname(BFILE)这项的数值竟是 <VALUE ERROR>,.这是正常的数值吗?
具体的:(大家看看我错在那里。在客户端使用PL\SQL)
1、 create or replace directory ding_dir as 'd:\mytry'; ——在我电脑D盘新建文件夹mytry,存放1.jpg 
2、 create table ding_bfiletest(ID number(8),fname blob);
  
  create table ding_BLOBTEST(ID number(8),blobname blob);
3、 INSERT INTO ding_bfiletest VALUES (1, BFILENAME ('ding_dir', '1.jpg')); 
4、读取bfile ,我编了个过程ding_bfile_blob_test
  create or replace procedure ding_bfile_blob_test(tid in number, filename in varchar2, filedir in varchar2,upmessage out varchar2) is
blob_loc BLOB; 
bfile_loc BFILE;
begin
  INSERT INTO ding_BLOBTEST(ID,blobname) VALUES(TID,EMPTY_BLOB()) RETURN blobname INTO blob_LOC;  
  bfile_loc := BFILENAME(filedir,filename);  
  /* 假如bfile文件实际存在 */  
  IF (DBMS_LOB.FILEEXISTS(bfile_loc) != 0) THEN  
  /* 打开bfile源文件 */  
  DBMS_LOB.OPEN(bfile_loc, DBMS_LOB.LOB_READONLY);  
  /* 打开目标blob: */  
  DBMS_LOB.OPEN(blob_loc, DBMS_LOB.LOB_READWRITE);  
  /*从文件中装入 */  
  DBMS_LOB.LOADFROMFILE(blob_loc, bfile_loc,DBMS_LOB.GETLENGTH(bfile_loc));  
  /* 记得关闭: */  
  DBMS_LOB.CLOSE(blob_loc);  
  DBMS_LOB.CLOSE(bfile_loc);  
  COMMIT;  
  upmessage := '0';  
  END IF;  
  EXCEPTION WHEN OTHERS THEN ROLLBACK;  
  upmessage := '操作失败';  
end ding_bfile_blob_test;
我要问的两点:

  ①执行3后,查看ding_bfiletest,表中 fname(BFILE)这项的数值竟是 <VALUE ERROR>,.这是正常的数值吗?

  ②测试函数过程,总显示'操作失败'?
为什么呢?为什么呢?
为什么呢?
为什么呢?
为什么呢?



------解决方案--------------------
注意要大写

INSERT INTO ding_bfiletest VALUES (1, BFILENAME ('DING_DIR', '1.jpg'));