分享
 
 
 

Oracle进阶 LOB字段学习

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

--插入bfile

create or replace procedure insert_book(filename varchar2) as

book_file bfile := NULL;

bookExists boolean := false;

begin

book_file := bfilename('BOOK_TEXT', filename);

bookExists := dbms_lob.fileexists(book_file) = 1;

if bookExists then

insert into my_book_files values ((select count(*) from my_book_files) + 1 , book_file);

dbms_output.put_line('Insert sUCess! file : ' filename);

else

dbms_output.put_line('Not exists! file : ' filename);

end if;

exception

when dbms_lob.noexist_Directory then

dbms_output.put_line('Error: ' sqlerrm);

when dbms_lob.invalid_directory then

dbms_output.put_line('Error : ' sqlerrm);

when others then

dbms_output.put_line('Unkown Error : ' sqlerrm);

end insert_book;

/

create or replace procedure insertPDF(fileName varchar2) is

fileLoc bfile;

nID number;

nPDFSize integer;

bFileExists boolean := false;

begin

fileLoc := bfilename('PDFDIR',filename);

bFileExists := dbms_lob.fileexists(fileLoc) = 1;

if bFileExists = false then

dbms_output.put_line(fileName ' not exists');

return;

end if;

nPDFSize := dbms_lob.getlength(fileLoc);

dbms_output.put_line('the length of ' fileName ' is ' nPDFSize);

select count(*) + 1 into nID from PDFTable;

insert into PDFTable(ID,Pdffile)

values (nID, fileLoc);

exception

when dbms_lob.noexist_directory then

dbms_output.put_line('Error: ' sqlerrm);

when dbms_lob.invalid_directory then

dbms_output.put_line('Error : ' sqlerrm);

when others then

dbms_output.put_line('Unkown Error : ' sqlerrm);

end;

/

--插入 blob

CREATE OR REPLACE procedure insertImg(imgName varchar2) is

v_file_loc bfile;

v_image blob;

nID number;

nImgSize integer;

bFileExists boolean := false;

begin

v_file_loc := bfilename('IMAGEDIR', imgName);

bFileExists := dbms_lob.fileExists(v_file_loc) = 1;

if bFileExists = false then

dbms_output.put_line(imgName ' not exists');

return;

end if;

nImgSize := dbms_lob.getlength(v_file_loc);

dbms_output.put_line(imgName ' size is ' nImgSize);

dbms_output.put_line('Now Inserting empty image row');

select count(*) + 1 into nID from imagetable;

insert into imagetable(ID, image)

values (nID, empty_blob)

returning image into v_image;

DBMS_LOB.FILEOPEN (v_file_loc);

dbms_output.put_line('Open file');

dbms_lob.loadfromfile(v_image, v_file_loc, nImgSize);

DBMS_LOB.FILECLOSE(v_file_loc);

commit;

exception

when others then

dbms_output.put_line('Error happen! ' sqlerrm);

DBMS_LOB.FILECLOSE(v_file_loc);

end insertImg;

/

--=================================================

SQL> create table view_sites_info (

2 site_id number(3),

3 audio blob default empty_blob(),

4 document clob default empty_clob(),

5 video_file bfile default null

6 );

表已创建。

SQL> commit;

提交完成。

SQL> @e:\writelob

PL/SQL 过程已成功完成。

SQL> desc view_sites_info;

名称 是否为空? 类型

----------------------------------------- -------- ----------------------------

SITE_ID NUMBER(3)

AUDIO BLOB

DOCUMENT CLOB

VIDEO_FILE BINARY FILE LOB

SQL> select document from view_sites_info where site_id = 100;

DOCUMENT

--------------------------------------------------------------------------------

This is a writing example

SQL> desc view_sites_info

名称 是否为空? 类型

----------------------------------------- -------- ----------------------------

SITE_ID NUMBER(3)

AUDIO BLOB

DOCUMENT CLOB

VIDEO_FILE BINARY FILE LOB

SQL> insert into bloBTest values (1, bfilename('tempdir', 'C:\Documents and Settings\Administrator\My Documents\My Pictures\tu1.jpg'));

insert into blobtest values (1, bfilename('tempdir', 'C:\Documents and Settings\Administrator\My Documents\My Pictures\tu1.jpg'))

*

ERROR 位于第 1 行:

ORA-00932: 数据类型不一致

SQL> desc BFILETEST

名称 是否为空? 类型

----------------------------------------- -------- ----------------------------

ID NUMBER(3)

FNAME BINARY FILE LOB

SQL> insert into BFILETEST values (1, bfilename('tempdir', 'C:\Documents and Settings\Administrator\My Documents\My Pictures\tu1.jpg'));

已创建 1 行。

SQL> get E:\insertimg

1 create or replace procedure img_insert (

2 tid varchar2,

3 filename varchar2) as

4 F_LOB BFILE;

5 B_LOB BLOB;

6 begin

7 insert into image_lob (t_id, t_image) values (tid, empty_blob()) return t_image into B_LOB;

8 F_LOB := bfilename('images', filename);

9 dbms_lob.fileopen(F_LOB, dbms_lob.file_readonly);

10 dbms_lob.loadfromfile(B_LOB, F_LOB, dbms_lob.getlength(F_LOB));

11 dbms_lob.fileclose(F_LOB);

12 commit;

13* end;

SQL> r

1 create or replace procedure img_insert (

2 tid varchar2,

3 filename varchar2) as

4 F_LOB BFILE;

5 B_LOB BLOB;

6 begin

7 insert into image_lob (t_id, t_image) values (tid, empty_blob()) return t_image into B_LOB;

8 F_LOB := bfilename('images', filename);

9 dbms_lob.fileopen(F_LOB, dbms_lob.file_readonly);

10 dbms_lob.loadfromfile(B_LOB, F_LOB, dbms_lob.getlength(F_LOB));

11 dbms_lob.fileclose(F_LOB);

12 commit;

13* end;

SQL> create table IMAGE_LOB (T_ID varchar2(5) not null, T_IMAGE blob not null );

表已创建。

SQL> commit;

提交完成。

SQL> get E:\insertimg

1 create or replace procedure img_insert (

2 tid varchar2,

3 filename varchar2) as

4 F_LOB BFILE;

5 B_LOB BLOB;

6 begin

7 insert into image_lob (t_id, t_image) values (tid, empty_blob()) return t_image into B_LOB;

8 F_LOB := bfilename('images', filename);

9 dbms_lob.fileopen(F_LOB, dbms_lob.file_readonly);

10 dbms_lob.loadfromfile(B_LOB, F_LOB, dbms_lob.getlength(F_LOB));

11 dbms_lob.fileclose(F_LOB);

12 commit;

13* end;

SQL> r

1 create or replace procedure img_insert (

2 tid varchar2,

3 filename varchar2) as

4 F_LOB BFILE;

5 B_LOB BLOB;

6 begin

7 insert into image_lob (t_id, t_image) values (tid, empty_blob()) return t_image into B_LOB;

8 F_LOB := bfilename('images', filename);

9 dbms_lob.fileopen(F_LOB, dbms_lob.file_readonly);

10 dbms_lob.loadfromfile(B_LOB, F_LOB, dbms_lob.getlength(F_LOB));

11 dbms_lob.fileclose(F_LOB);

12 commit;

13* end;

过程已创建。

SQL> commit;

提交完成。

SQL> commit;

提交完成。

SQL> $cls

SQL> @e:\insertimg

过程已创建。

SQL> commit;

提交完成。

SQL> exec img_insert('1', 'e:\tu1.jpg');

PL/SQL 过程已成功完成。

SQL> @e:\insertimg

过程已创建。

SQL> exec img_insert('2', 'e:\tu2.jpg');

PL/SQL 过程已成功完成。

SQL> select count(*) from image_lob;

COUNT(*)

----------

3

SQL> @e:\insertimg

过程已创建。

PL/SQL 过程已成功完成。

SQL> @e:\insertimg

过程已创建。

PL/SQL 过程已成功完成。

SQL> @e:\insertimg

过程已创建。

PL/SQL 过程已成功完成。

SQL> @e:\insertimg

过程已创建。

PL/SQL 过程已成功完成。

SQL> get e:\insertimg

1 create or replace procedure "img_insert" (

2 tid varchar2,

3 filename varchar2) as

4 F_LOB BFILE;

5 B_LOB BLOB;

6 begin

7 dbms_output.put_line('Now begin');

8 insert into image_lob (t_id, t_image) values (tid, empty_blob()) return t_image into B_LOB;

9 F_LOB := bfilename('IMAGES', filename);

10 dbms_output.put_line('Open success');

11 dbms_output.put_line('Now open :' filename);

12 dbms_lob.fileopen(F_LOB, dbms_lob.file_readonly);

13 dbms_lob.loadfromfile(B_LOB, F_LOB, dbms_lob.getlength(F_LOB));

14 dbms_lob.fileclose(F_LOB);

15 commit;

16 EXCEPTION

17 when others

18 then

19 DBMS_OUTPUT.PUT_LINE('OTHERS Exception ' sqlerrm );

20* end;

21 /

过程已创建。

SQL> r

1 create or replace procedure "img_insert" (

2 tid varchar2,

3 filename varchar2) as

4 F_LOB BFILE;

5 B_LOB BLOB;

6 begin

7 dbms_output.put_line('Now begin');

8 insert into image_lob (t_id, t_image) values (tid, empty_blob()) return t_image into B_LOB;

9 F_LOB := bfilename('IMAGES', filename);

10 dbms_output.put_line('Open success');

11 dbms_output.put_line('Now open :' filename);

12 dbms_lob.fileopen(F_LOB, dbms_lob.file_readonly);

13 dbms_lob.loadfromfile(B_LOB, F_LOB, dbms_lob.getlength(F_LOB));

14 dbms_lob.fileclose(F_LOB);

15 commit;

16 EXCEPTION

17 when others

18 then

19 DBMS_OUTPUT.PUT_LINE('OTHERS Exception ' sqlerrm );

20* end;

SQL> select table_name from user_tables;

TABLE_NAME

------------------------------

ANYDATATAB

BFILETEST

BLOBTEST

BONUS

DEPT

EMP

IMAGE_LOB

LINEITEM_CV

LINEITEM_DP

SALGRADE

TAB2

TABLE_NAME

------------------------------

TEST

TEST2

VIEW_SITES_INFO

已选择14行。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有