Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          在Oracle中存儲Image
          ?
          ??? 學(xué)習(xí)一下如何在Oracle中存儲圖片、影像等大文件。是從Tom那里搬過來的代碼,真的是深入淺出啊,能把復(fù)雜的問題弄簡單。好了廢話不多說了,直接上代碼。 注意:后面那段是用于直接輸出html代碼在網(wǎng)頁展現(xiàn)的腳本。
          ?
          ?
          SQL> create table demo
          ? 2? ( id??????? int primary key,
          ? 3??? theBlob?? blob
          ? 4? )
          ? 5? /
          ?
          Table created.
          ?
          ?
          SQL> create or replace directory my_files as 'D:\TEST\Image';
          ?
          Directory created.
          ?
          ?
          SQL> declare
          ? 2????? l_blob??? blob;
          ? 3????? l_bfile?? bfile;
          ? 4? begin
          ? 5????? insert into demo values ( 1, empty_blob() )
          ? 6????? returning theBlob into l_blob;
          ? 7
          ? 8????? l_bfile := bfilename( 'MY_FILES', 'af73.jpg' );
          ? 9????? dbms_lob.fileopen( l_bfile );
          10
          11????? dbms_lob.loadfromfile( l_blob, l_bfile,
          12???????????????????????????? dbms_lob.getlength( l_bfile ) );
          13
          14????? dbms_lob.fileclose( l_bfile );
          15? end;
          16? /
          ?
          PL/SQL procedure successfully completed.
          ?
          --done
          ?
          ?
          ?
          ?

          --Now here is the package that can retrieve the pdf (or anything for that matter.? Just
          --keep adding procedures that are named after the file type like .doc, .pdf, .xls and so
          --on.? Some browsers really want the extension in the URL to be "correct")

          SQL> create or replace package image_get
          ? 2? as
          ? 3????? procedure gif( p_id in demo.id%type );
          ? 4? end;
          ? 5? /
          ?
          Package created.
          ?
          SQL>
          SQL> create or replace package body image_get
          ? 2? as
          ? 3
          ? 4? procedure gif( p_id in demo.id%type )
          ? 5? is
          ? 6????? l_lob?? blob;
          ? 7????? l_amt?? number default 30;
          ? 8????? l_off?? number default 1;
          ? 9????? l_raw?? raw(4096);
          10? begin
          11????? select theBlob into l_lob
          12??????? from demo
          13?????? where id = p_id;
          14?????? -- make sure to change this for your type!
          15????? owa_util.mime_header( 'image/gif' );
          16
          17????????? begin
          18???????????? loop
          19??????????????? dbms_lob.read( l_lob, l_amt, l_off, l_raw );
          20
          21??????????????? -- it is vital to use htp.PRN to avoid
          22??????????????? -- spurious line feeds getting added to your
          23??????????????? -- document
          24??????????????? htp.prn( utl_raw.cast_to_varchar2( l_raw ) );
          25??????????????? l_off := l_off+l_amt;
          26??????????????? l_amt := 4096;
          27???????????? end loop;
          28????????? exception
          29???????????? when no_data_found then
          30??????????????? NULL;
          31????????? end;
          32? end;
          33
          34? end;
          35? /
          ?
          Package body created.
          ?
          ?
          ?
          ??? 注:以上腳本涉及到的系統(tǒng)包有:DBMS_LOB | OWA_UTIL | UTL_RAW | HTP
          ?
          ??????? UTL_RAW might not be installed on your database.? It is part of replication.
          ??????? If you do not have it installed, simply:
          ??????? o cd $ORACLE_HOME/rdbms/admin
          ??????? o find the two files with "raw" in their name (eg: ls *raw*)
          ??????? o using svrmgrl connect as INTERNAL OR SYS -- only these users, no one else can successfully install UTL_RAW
          ??????? o run the .sql and then the .plb file
          ?
          ??? 系統(tǒng)包使用方法可查看《PLSQL Packages and Types Reference》
          ?
          ?
          ?
          ?
          posted on 2009-03-16 21:45 decode360 閱讀(324) 評論(0)  編輯  收藏 所屬分類: 06.PLSQL
          主站蜘蛛池模板: 边坝县| 张北县| 古丈县| 泽普县| 黔西县| 玛纳斯县| 霍林郭勒市| 灵川县| 新竹市| 高青县| 治多县| 景谷| 金寨县| 兖州市| 镇沅| 应用必备| 吉安县| 平潭县| 蚌埠市| 和平区| 双江| 梧州市| 无棣县| 赣榆县| 四平市| 中超| 永仁县| 铜鼓县| 兴海县| 怀宁县| 贺州市| 北票市| 乐至县| 平定县| 当涂县| 威远县| 大兴区| 昌平区| 观塘区| 正宁县| 瑞安市|