zoukankan      html  css  js  c++  java
  • Oracle操作大对象BLOB示例

    --创建一张测试表

    create table test2

    (  

        tid int primary key,   

      tname varchar2(20),   

      tcontent blob --数据类型为blob

    )

    --创建普通序列号

    create sequence sequ_test2

    --写入图片

    declare   

    tempimg blob;--定义临时变量存放数据   

    tempdir bfile := bfilename('TEST_DIR','Koala.jpg');--非常重要:所有数据都是大写存放的

    begin          

      insert into test2 values (sequ_test2.nextval,'Koala.jpg',empty_blob())

      returning tcontent into tempimg;        

     --使用内置的包,给tempimg写入数据   

        dbms_lob.fileopen(tempdir);--打开指定文件    

       dbms_lob.loadfromfile(tempimg,tempdir,dbms_lob.getlength(tempdir));    

       dbms_lob.fileclose(tempdir);--关闭文件          

       dbms_output.put_line('恭喜你,终于成功了!!!');           

       commit;

    end ;

    --写入音乐

    declare      

      tempimg blob;--定义临时变量存放数据      

         tempdir bfile := bfilename('TEST_DIR','Kalimba.mp3');--非常重要:所有数据都是大写存放的

    begin  

              insert into test2 values (sequ_test2.nextval,'Kalimba.mp3',empty_blob()) returning tcontent into tempimg;            

       --使用内置的包,给tempimg写入数据      

       dbms_lob.fileopen(tempdir);--打开指定文件      

      dbms_lob.loadfromfile(tempimg,tempdir,dbms_lob.getlength(tempdir));      

      dbms_lob.fileclose(tempdir);--关闭文件            

      dbms_output.put_line('恭喜你,终于成功了!!!');            

       commit;

    end ;

    --将Blob对象,写成磁盘文件

    declare       

       l_file utl_file.file_type;--定义写入磁盘文件的类型和格式       

       l_buffer raw(32767);--定义缓冲区大小      

       l_amount binary_integer := 3276; --每次位移个数       

       l_pos int :=1;--开始位置       

      l_blob blob;--临时数据存放       

      l_blob_len int;--总长度 begin       

      select tcontent into l_blob from test2 where tid=2;

      --将数据库中的数据,存放在blob变量中              

      --获取blob文件的长度       

      l_blob_len := dbms_lob.getlength(l_blob);              

       --准备写入磁盘文件       

       l_file := utl_file.fopen('TEST_DIR','xxx.mp3','wb');              

      --写入数据       

      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);             

      dbms_output.put_line('恭喜,恭喜。。。。文件写成功!');      

    end;

  • 相关阅读:
    数据分析淘宝口红评论(男生勿进
    使用BaseMap绘制地图它不香么
    python使用openpyxl操作excel
    pandas之初探index对象
    pandas之IO数据读写
    pandas之DataFramer入门到弃坑
    pandas数据重复,替换和添加处理
    pandas数据缺失处理
    SVG:可伸缩的矢量图形
    20条书写CSS代码
  • 原文地址:https://www.cnblogs.com/wshan/p/2873654.html
Copyright © 2011-2022 走看看