99分的问题,求BLOB数据类型用dbms_lob包存入数据库的详细方法,多谢!

girlyz1999 2002-07-04 10:15:03
两个问题:1:如何用dbms_lob包将一个blob类型的文件存储到oracle数据库中,希望能说明得详细点。
2:if exists(select * from TC12
where mldm=@mldm and wjmc=UPPER(@wjmc) and kzmc=UPPER
(@kzmc) and wjbz<>'H')
begin
....
这段代码是以前在sqlserver下用过的,现在想在oracle下完成同样功能(exists)
如何实现?
...全文
411 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
milp 2002-09-12
  • 打赏
  • 举报
回复
这样不是只能保存数据库服务器上的文件吗?
KingSunSha 2002-07-04
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/472/472037.xml
bzszp 2002-07-04
  • 打赏
  • 举报
回复
察看oracle自带的文档,里面对dbms_lob包的使用有详细的说明,还有处理的各种方法
oracle安装目录下
...\doc\server.815\a68004\02_mmd4b.htm
Michaelyfj 2002-07-04
  • 打赏
  • 举报
回复
如何用dbms_lob包将一个blob类型的文件存储到oracle数据库中,希望能说明得详细点。
检查dbms_lob包的使用方法
Michaelyfj 2002-07-04
  • 打赏
  • 举报
回复
if exists(select * from TC12 where 条件) then
...
这是oracle的语法
girlyz1999 2002-07-04
  • 打赏
  • 举报
回复
jlandzpa(ORA-00600 )
多谢多谢! best wish to you!
3yugui 2002-07-04
  • 打赏
  • 举报
回复
在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字段中去了。


jlandzpa 2002-07-04
  • 打赏
  • 举报
回复
可以:
select count(*) into www from ..
where ..... and rownum =1 ;

if www > 0 then
..........
girlyz1999 2002-07-04
  • 打赏
  • 举报
回复
多谢各位的热心帮助,这些方法好象都只能将数据库服务器上的物理文件插入数据库中,如果是在客户机上的话,这样做是不是就有问题呢?我就遇到了权限的问题。还有就是哪位再抽点时间回答一下第二个问题。再次感谢!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧