如何用sql语句写入含blob类型字段的数据?

dxbjeremy 2011-12-14 10:17:46
tablename: tab1; 字段:id number , phone blob 两个字段, 一个图片文件:c:\test\phone1.jpg 中,如何把这个图片文件用sql写入到这个表中,麻烦能具体写一下吗,谢谢!
...全文
6244 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobn_cn 2011-12-15
  • 打赏
  • 举报
回复
可以先insert记录,然后再updateblob来更新blob字段,共两条SQL。
土匪八号 2011-12-15
  • 打赏
  • 举报
回复
现将文件转换成二进制流,在转换成blob
我心飞翔 2011-12-15
  • 打赏
  • 举报
回复
无法直接用纯SQL语句实现,但可以写个PL/SQL块来实现。
具体实例,请参考

-- 创建表空间TeacherSpace
CREATE TABLESPACE TeacherSpace
DATAFILE 'TeacherDFile.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

-- 老师信息表
CREATE TABLE Teacher
(
NAME CHAR(10), --姓名
RESUME CLOB, --简历
Photo BLOB, --照片
Recording BFILE --自我陈述(录音)
)
LOB(RESUME, Photo) STORE AS
(
TABLESPACE TeacherSpace
STORAGE(INITIAL 6144 NEXT 6144)
CHUNK 8K
ENABLE STORAGE IN ROW
);

-- 创建目录DBFILE_DIR, 并授与用户权限,需要SYS帐户
CREATE OR REPLACE DIRECTORY DBFILE_DIR AS 'D:\D12_01';
GRANT READ ON DIRECTORY DBFILE_DIR TO TEST;
-- 向Teacher表插入2条记录
INSERT INTO Teacher VALUES('张力', EMPTY_CLOB(), EMPTY_BLOB(), BFILENAME('DBFILE_DIR', 'a.mp3'));
INSERT INTO Teacher VALUES('王永', EMPTY_CLOB(), EMPTY_BLOB(), BFILENAME('DBFILE_DIR', 'b.mp3'));


下面写一个PL/SQL程序块,对照片字段进行赋值。


到此,搞定。
dxbjeremy 2011-12-15
  • 打赏
  • 举报
回复
to LuiseRADL:

用你的代码试了,还是有问题,在
Dbms_Lob.open(destloc,dbms_lob.lob_readwrite);
出现 ora-22292:无法在没有事务处理的情况下以读写模式打开blob
另外问下 DBFILE_DIR 这个在过程里需要定义吗,直接用不能用,加引号后是否又起不到作用,
如果要定义 那是什么类型,我用sys用户已经创建DBFILE_DIR并授权了。但在过程里如何使用?


create or replace procedure pro_blobsql is
destloc blob;
srcloc bfile;
amount number(10);
begin
amount := 4000;
select name into destloc from tblowtest;
select bfilename('DBFILE_DIR','1.jpg') into srcloc from dual;
Dbms_Lob.open(srcloc,dbms_lob.lob_readonly);
Dbms_Lob.open(destloc,dbms_lob.lob_readwrite);
Dbms_lob.loadfromfile(destloc,srcloc,amount);
Dbms_lob.close(destloc);
Dbms_lob.close(srcloc);
commit;
end;
xiaobn_cn 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dxbjeremy 的回复:]
楼上的xiaobn_cn,能具体写下你的SQL吗?
[/Quote]

经查证,我在3楼所说的方法是PB语言的方法,不适用于其它语言。代码大致如下:

insert into tab1 (id) values (:id);
updateblob tab1 set phone = :ph where id = :id;
dxbjeremy 2011-12-15
  • 打赏
  • 举报
回复
楼上的xiaobn_cn,能具体写下你的SQL吗?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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