如何批量插入图片;求一SQL语句

Deseret 2007-12-28 09:39:52
有一数据表(T_Photo),内有编号字段(BH)和图像字段(PHOTO)

编号字段的规则为6位固定字符串+4位流水号

现 已知编号为1201020001记录图像字段中有图像,

如何:追加200条记录,让其编号从1201030001开始,图像字段值等于已知编号的图像字段值

不胜感谢。
...全文
268 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaa123_321_ 2012-08-22
  • 打赏
  • 举报
回复
图片。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ORAClE SE 2012-08-22
  • 打赏
  • 举报
回复
给你个例子:
将图片插入到BLOB类型的字段中

建立一个表:create table a(a blob);
建立一个目录:create directory tmp as 'e:\';
建立一个PL/SQL块:
declare
b_file bfile;
b_lob blob;
begin
insert into a(a) values(empty_blob()) return a into b_lob;
--为了使PL/SQL编译成功,必须先为该列插入一个empty_blob() 值,return a into b_lob将该列与一个blog类型的变量绑定在一起,以后只要为b_lob赋值,即等于将该值插入了表中。
b_file:=bfilename('tmp','filename.jpg');
--tmp是建立的文件所在的目录,filename.jpg是文件名;将文件转换为bfile类型
dbms_lob.open(b_file,dbms_lob.file_readonly);--将b_file 以只读的方式打开
dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));-- 将b_file中的内容转换到b_lob中
dbms_lob.close(b_file);
commit;
end;
飞火流星02027 2012-08-22
  • 打赏
  • 举报
回复

DBMS_OUTPUT.put_line('追加第'||(i-1)||'条...');

如果bh列是number就更简单了:
BEGIN
declare
i number;
begin
FOR i IN 1201020001 .. 1201020201 LOOP
DBMS_OUTPUT.put_line('追加第'||(i-1)||'条...');
INSERT INTO t_photo (bh, photo)
values (i, (select photo from t_photo where bh='1201020001'));
DBMS_OUTPUT.put_line('追加第'||(i-1)||'条成功!');
END LOOP;
end;
END;
飞火流星02027 2012-08-22
  • 打赏
  • 举报
回复
CREATE TABLE "XXZWZX"."TEST_PHOTO" 
( "BH" VARCHAR2(10) NOT NULL ENABLE,
"PHOTO" BLOB,
CONSTRAINT "PK_T_PHOTO_BH" PRIMARY KEY ("BH")
)
COMMENT ON COLUMN "XXZWZX"."TEST_PHOTO"."BH" IS '图像编号';
COMMENT ON COLUMN "XXZWZX"."TEST_PHOTO"."PHOTO" IS '图像';
COMMENT ON TABLE "XXZWZX"."TEST_PHOTO" IS '图像表';
飞火流星02027 2012-08-22
  • 打赏
  • 举报
回复
--1201020001
--select * from t_photo for update
--delete from t_photo where bh>1201020001
--select '1201020'||substr('00'||11,length('00'||11)-2) from dual
--DBMS_OUTPUT.put_line('追加第'||(i+1)||'条成功');
--如果需要追加的记录比较多也可以100条做一次commit;
BEGIN
declare
i number;
begin
FOR i IN 2 .. 201 LOOP
DBMS_OUTPUT.put_line('追加第'||(i+1)||'条...');
INSERT INTO t_photo (bh, photo)
values ('1201020'||substr('00'||i,length('00'||i)-2), (select photo from t_photo where bh='1201020001'));
DBMS_OUTPUT.put_line('追加第'||(i+1)||'条成功!');
END LOOP;
end;
END;
hu825065235 2012-08-19
  • 打赏
  • 举报
回复
如果不是保密的图片,不建议放进数据库,直接放在文件夹里面算了
pl_mm5 2012-08-06
  • 打赏
  • 举报
回复
图片~
一者仁心 2007-12-28
  • 打赏
  • 举报
回复
for a in 10000..10200 loop
insert into T_Photo(BH,PHOTO) values('******'+(序列.nextval+a),select PHOTO from T_Photo where BH=序列.currval)
end loop
使用的时候注意序列的nextval 和 currval
Deseret 2007-12-28
  • 打赏
  • 举报
回复
二楼。三楼追加后的记录中,图像字段的值不是NULL么?里面应该没有图像吧

我的意思是将编号1201020001记录图像追加到这些新增的数据行中。
kinglht 2007-12-28
  • 打赏
  • 举报
回复
楼上的可以,也可以先建个序列,然后递增!
for v in 1..200 loop
insert into T_Photo(BH,PHOTO) values(1201030000+v,v)
end loop
一者仁心 2007-12-28
  • 打赏
  • 举报
回复
for a in 10000..10200 loop
insert into T_Photo(BH,PHOTO) values('******'+(序列+a),a)
end loop
你图像字段值等于已知编号的图像字段值 什么意思不是很清楚 你以前表使用的序列继续使用

17,377

社区成员

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

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