Oracle 中存储文件的问题 用BLOB字段吧当然,如果需要读取或是写入的时候会麻烦一些 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一篇短文:在Oracle 8i的SQL*Plus中如何利用LOB字段存取操作系统二进制文件Oracle 8i数据库系统功能比前面版本更加完善,尤其是出现了BLOB,CLOB,NCLOB,BFILE这些LOB(大型对象)类型来取代功能有限的LONG、LONGRAW类型。BLOB字段最大长度为4G(4,294,967,295)字节,而且不再象LONGRAW那样每个表中只是限制有一个字段是LONGRAW(最长2G)型的。BLOB,CLOB,NCLOB为内部BLOB(数据通常在数据库中存放),BFILE为外部LOB(所存储的只是指向外部操作系统文件的指针),用户可以使用PL/SQL的包DBMS_LOB来处理LOB数据,但是遗憾的是,DBMS_LOB包只能将二进制操作系统文件写入到BLOB字段中,却无法将BLOB字段中的二进制操作系统文件取回到操作系统中,估计将来会有所改善。本文将就如何在SQL*Plus将WORD文件存入取出ORACLE中作详细解释说明,供各位同行参考。在internal这个用户下给scott用户授权如下:SQL>grant create any directory to scott;SQL>grant create any library to scott;在scott这个用户下执行下述语句:SQL>create table bfile_tab (bfile_column BFILE);SQL>create table utl_lob_test (blob_column BLOB);SQL>create or replace directory utllobdir as 'C:\DDS\EXTPROC';SQL>set serveroutput on然后执行下面语句就将C:\DDS\EXTPROC目录下的word文件COM.doc存入到utl_lob_test 表中的blob_column字段中了。declare a_blob BLOB; a_bfile BFILE := BFILENAME('UTLLOBDIR','COM.doc'); --用来指向外部操作系统文件begin insert into bfile_tab values (a_bfile) returning bfile_column into a_bfile; insert into utl_lob_test values (empty_blob()) returning blob_column into a_blob; dbms_lob.fileopen(a_bfile); dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile)); dbms_lob.fileclose(a_bfile); commit;end;/SQL>show errors此时可以使用DBMS_LOB包的getlength这个procedure来检测是否已经将该word文件存入到blob字段中了。如:SQL> select dbms_lob.getlength(blob_column) from UTL_LOB_TEST;结果如下:DBMS_LOB.GETLENGTH(BLOB_COLUMN)------------------------------- 83968说明该word文件已经存入到blob字段中去了。 一篇短文:在Oracle 8i的SQL*Plus中如何利用LOB字段存取操作系统二进制文件Oracle 8i数据库系统功能比前面版本更加完善,尤其是出现了BLOB,CLOB,NCLOB,BFILE这些LOB(大型对象)类型来取代功能有限的LONG、LONGRAW类型。BLOB字段最大长度为4G(4,294,967,295)字节,而且不再象LONGRAW那样每个表中只是限制有一个字段是LONGRAW(最长2G)型的。BLOB,CLOB,NCLOB为内部BLOB(数据通常在数据库中存放),BFILE为外部LOB(所存储的只是指向外部操作系统文件的指针),用户可以使用PL/SQL的包DBMS_LOB来处理LOB数据,但是遗憾的是,DBMS_LOB包只能将二进制操作系统文件写入到BLOB字段中,却无法将BLOB字段中的二进制操作系统文件取回到操作系统中,估计将来会有所改善。本文将就如何在SQL*Plus将WORD文件存入取出ORACLE中作详细解释说明,供各位同行参考。在internal这个用户下给scott用户授权如下:SQL>grant create any directory to scott;SQL>grant create any library to scott;在scott这个用户下执行下述语句:SQL>create table bfile_tab (bfile_column BFILE);SQL>create table utl_lob_test (blob_column BLOB);SQL>create or replace directory utllobdir as 'C:\DDS\EXTPROC';SQL>set serveroutput on然后执行下面语句就将C:\DDS\EXTPROC目录下的word文件COM.doc存入到utl_lob_test 表中的blob_column字段中了。declare a_blob BLOB; a_bfile BFILE := BFILENAME('UTLLOBDIR','COM.doc'); --用来指向外部操作系统文件begin insert into bfile_tab values (a_bfile) returning bfile_column into a_bfile; insert into utl_lob_test values (empty_blob()) returning blob_column into a_blob; dbms_lob.fileopen(a_bfile); dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile)); dbms_lob.fileclose(a_bfile); commit;end;/SQL>show errors此时可以使用DBMS_LOB包的getlength这个procedure来检测是否已经将该word文件存入到blob字段中了。如:SQL> select dbms_lob.getlength(blob_column) from UTL_LOB_TEST;结果如下:DBMS_LOB.GETLENGTH(BLOB_COLUMN)------------------------------- 83968说明该word文件已经存入到blob字段中去了。 谢谢,楼上的大虾。但是如何读出word文档那? 求各位帮忙写两个SQL语句 关于Oracle数据库恢复的问题 帮忙看看怎么写这个存储过程? 有个关于字符串操作的问题,请帮帮忙! 求教关于在分区中查询的问题! 表在更新内容时,在触发器中如何判断表的哪一列的内容被修改了? SVRMGRL和SQLPLUS的区别和分工 xp下装oracle出问题,让我在这儿发表一下对windows xp的不满 oracle中,怎么查看一张表的所有字段以及这些字段中的所有约束。 win10安装oracle12 c失败[ins-30131] 一个简单问题,在线等…… 约束名称是存储在哪里的?
在Oracle 8i的SQL*Plus中如何利用LOB字段存取操作系统二进制文件
Oracle 8i数据库系统功能比前面版本更加完善,尤其是出现了BLOB,CLOB,NCLOB,
BFILE这些LOB(大型对象)类型来取代功能有限的LONG、LONGRAW类型。BLOB字段最
大长度为4G(4,294,967,295)字节,而且不再象LONGRAW那样每个表中只是限制有一
个字段是LONGRAW(最长2G)型的。BLOB,CLOB,NCLOB为内部BLOB(数据通常在数据
库中存放),BFILE为外部LOB(所存储的只是指向外部操作系统文件的指针),用户可
以使用PL/SQL的包DBMS_LOB来处理LOB数据,但是遗憾的是,DBMS_LOB包只能将二进
制操作系统文件写入到BLOB字段中,却无法将BLOB字段中的二进制操作系统文件取回
到操作系统中,估计将来会有所改善。本文将就如何在SQL*Plus将WORD文件存入取出
ORACLE中作详细解释说明,供各位同行参考。在internal这个用户下给scott用户授权如下:
SQL>grant create any directory to scott;
SQL>grant create any library to scott;
在scott这个用户下执行下述语句:SQL>create table bfile_tab (bfile_column BFILE);
SQL>create table utl_lob_test (blob_column BLOB);
SQL>create or replace directory utllobdir as 'C:\DDS\EXTPROC';
SQL>set serveroutput on然后执行下面语句就将C:\DDS\EXTPROC目录下的word文件COM.doc存入到utl_lob_test
表中的blob_column字段中了。declare
a_blob BLOB;
a_bfile BFILE := BFILENAME('UTLLOBDIR','COM.doc'); --用来指向外部操作系统文件
begin
insert into bfile_tab values (a_bfile)
returning bfile_column into a_bfile;
insert into utl_lob_test values (empty_blob())
returning blob_column into a_blob;
dbms_lob.fileopen(a_bfile);
dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile));
dbms_lob.fileclose(a_bfile);
commit;
end;
/
SQL>show errors
此时可以使用DBMS_LOB包的getlength这个procedure来检测是否已经将该word文件存入
到blob字段中了。如:
SQL> select dbms_lob.getlength(blob_column) from UTL_LOB_TEST;
结果如下:
DBMS_LOB.GETLENGTH(BLOB_COLUMN)
-------------------------------
83968
说明该word文件已经存入到blob字段中去了。
在Oracle 8i的SQL*Plus中如何利用LOB字段存取操作系统二进制文件
Oracle 8i数据库系统功能比前面版本更加完善,尤其是出现了BLOB,CLOB,NCLOB,
BFILE这些LOB(大型对象)类型来取代功能有限的LONG、LONGRAW类型。BLOB字段最
大长度为4G(4,294,967,295)字节,而且不再象LONGRAW那样每个表中只是限制有一
个字段是LONGRAW(最长2G)型的。BLOB,CLOB,NCLOB为内部BLOB(数据通常在数据
库中存放),BFILE为外部LOB(所存储的只是指向外部操作系统文件的指针),用户可
以使用PL/SQL的包DBMS_LOB来处理LOB数据,但是遗憾的是,DBMS_LOB包只能将二进
制操作系统文件写入到BLOB字段中,却无法将BLOB字段中的二进制操作系统文件取回
到操作系统中,估计将来会有所改善。本文将就如何在SQL*Plus将WORD文件存入取出
ORACLE中作详细解释说明,供各位同行参考。在internal这个用户下给scott用户授权如下:
SQL>grant create any directory to scott;
SQL>grant create any library to scott;
在scott这个用户下执行下述语句:SQL>create table bfile_tab (bfile_column BFILE);
SQL>create table utl_lob_test (blob_column BLOB);
SQL>create or replace directory utllobdir as 'C:\DDS\EXTPROC';
SQL>set serveroutput on然后执行下面语句就将C:\DDS\EXTPROC目录下的word文件COM.doc存入到utl_lob_test
表中的blob_column字段中了。declare
a_blob BLOB;
a_bfile BFILE := BFILENAME('UTLLOBDIR','COM.doc'); --用来指向外部操作系统文件
begin
insert into bfile_tab values (a_bfile)
returning bfile_column into a_bfile;
insert into utl_lob_test values (empty_blob())
returning blob_column into a_blob;
dbms_lob.fileopen(a_bfile);
dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile));
dbms_lob.fileclose(a_bfile);
commit;
end;
/
SQL>show errors
此时可以使用DBMS_LOB包的getlength这个procedure来检测是否已经将该word文件存入
到blob字段中了。如:
SQL> select dbms_lob.getlength(blob_column) from UTL_LOB_TEST;
结果如下:
DBMS_LOB.GETLENGTH(BLOB_COLUMN)
-------------------------------
83968
说明该word文件已经存入到blob字段中去了。
但是如何读出word文档那?