存储大数据图片

CREATE TABLE SCIMG (SC_TYPE CHAR(1),SC_NO NUMBER(8) ,IMAGE BLOB,IMG_NAME VARCHAR2(50),
constraint pk_scimg primary key(SC_TYPE,SC_NO) ) ;

select * from scimg

create or replace procedure insert_image(img_dir varchar2,sc_type char,sc_no number,img_name varchar2)
is
--建立存储过程用来数据库中插入图像
 img_blob blob;
 img_bfile bfile;
begin
  /*将通过empty_blob()函数将类型为blob的列初始化为空以便以后填充*/
  insert into SCIMG values(sc_type ,sc_no, empty_blob(),img_name)
  returning image into img_blob;
  img_bfile := bfilename(img_dir,img_name); --获得定位器指向的目录和文件
  dbms_output.put_line(dbms_lob.getlength(img_bfile));
  if (dbms_lob.fileexists(img_bfile)!=0) then --如果文件定位器指向的文件存在
    dbms_lob.fileopen(img_bfile,dbms_lob.file_readonly); --打开目标文件
   
    /*将文件字节流数据加载到指定的LOB类型变量中*/
    dbms_lob.loadfromfile(img_blob,img_bfile,dbms_lob.getlength(img_bfile));
   
    dbms_lob.fileclose(img_bfile);--关闭文件
    commit;
    dbms_output.put_line('已经从'||img_dir||'目录中读取了图片'||img_name||'向表中插入');

  else--如果文件定位器指向的文件不存在
    dbms_output.put_line('文件没找到');
  end if;
 
  exception when others then
  dbms_output.put_line(sqlerrm);
end;

select * from scapploc
select * from sccom
select * from scimg
--向表中插入图像
declare
begin
insert_image('IMAGE_PATH','C',100,'patricia.jpg');
commit;
end;

你可能感兴趣的:(exception,数据库,image,存储,insert,returning)