我的过程是这样的:
第一步:建表  
create table MY_USER_INFO
(
  emp_id            NUMBER(10) not null,
  name              VARCHAR2(64) not null,
  photo             BLOB,
  photo_name        VARCHAR2(15)
)
第二步:建目录  CREATE OR REPLACE DIRECTORY IMAGES AS 'e:\picture';
第三步:建存储过程 
CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS 
F_LOB BFILE;
B_LOB BLOB; 
BEGIN 
iNSERT INTO my_user_info (photo_name, photo) 
VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB; 
--插入空的blob 
F_LOB:= BFILENAME ('IMAGES', FILENAME); 
--获取指定目录下的文件 
DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY); 
--以只读的方式打开文件 
DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB)); 
--传递对象 
DBMS_LOB.FILECLOSE (F_LOB); 
--关闭原始文件 
COMMIT; 
END; 
/ 其中,出现的问题就是:创建的过程有编译错误,我怎么也看不到错误的出处。请高手讨教! 
另外,请帮我分析下:对于较大数据对象的存储,在数据库中是如何进行的?给分予以感谢!!!

解决方案 »

  1.   

    关于错误的出处,你用什么工具刷的存储过程?
    如果是sqlplus直接刷,你执行show errors就能看到错误 ;
    如果是用其它的工具,看看下方有没有被隐藏的小窗口,显示错误的。。
      

  2.   

    我能看出来一处returning into语法错误,lz试着修改看看
    iNSERT INTO my_user_info (photo_name, photo)  
    VALUES (TID,EMPTY_BLOB ()) RETURNING photo INTO B_LOB; 
      

  3.   

    在左边选中procedure那个文件夹,找到你的存储过程名字,鼠标点右键,然后点view,就能看到错误了。。