如何insert CLOB字段?

CRMNet 2011-01-09 01:07:24
insert into Tb(Content) values()
Content是CLOB字段
...全文
3447 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
10975037 2011-01-26
  • 打赏
  • 举报
回复
一般是先插入基础数据 ,在update clob 。由于clob数据很大 所以要分次读取 clob
下面是pb 读取blob 跟clob 差不多
ll_file_size = FileLength(is_pathname)
fh = FileOpen( is_pathname, StreamMode!, Read!, LockReadWrite!)

IF fh <> -1 THEN
nBytes = FileRead(fh, blTemp)

DO WHILE nBytes > 0
blGoodsImage = blGoodsImage + blTemp
ll_Pos = ll_Pos + nBytes
FileSeek( fh, ll_Pos, FromBeginning!)
nBytes = FileRead(fh, blTemp)
LOOP

FileClose(fh)
END IF

在修改bolb
updateblob tb_qc050
SET good_image = :blGoodsImage
---涛声依旧--- 2011-01-26
  • 打赏
  • 举报
回复
内容超过4000Bytes就无法直接插入了
CRMNet 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iihero 的回复:]
insert into Tb(content) values('CRMNet');
只要你想插入的内容不超过4000Bytes, 就可以直接插入。
否则得使用程序插入。
[/Quote]

是吗?
UPC子夜 2011-01-24
  • 打赏
  • 举报
回复
你可以用update 一直往后添加
每截取1000个字符 就调用一次update,在原来字段后边添加上
不知道行不行 我没试过
  • 打赏
  • 举报
回复
--上次做了测试 10g下
create table t_blob(stuname varchar2(20),dblob blob);

scott@YPCOST> ed
已写入 file afiedt.buf

1* insert into t_blob values ('tom',utl_raw.cast_to_raw('tom is a good boy!'))
scott@YPCOST> /

已创建 1 行。

scott@YPCOST> select stuname,utl_raw.cast_to_varchar2(dblob) from t_blob;

STUNAME
--------------------
UTL_RAW.CAST_TO_VARCHAR2(DBLOB)
----------------------------------------------------------------------------------------------------
tom
tom is a good boy!


scott@YPCOST> update t_blob set dblob=utl_raw.cast_to_raw('tom is not a good boy!') where stuname='t
om';

已更新 1 行。

scott@YPCOST> commit;

提交完成。

scott@YPCOST> select stuname,utl_raw.cast_to_varchar2(dblob) from t_blob;

STUNAME
--------------------
UTL_RAW.CAST_TO_VARCHAR2(DBLOB)
----------------------------------------------------------------------------------------------------
tom
tom is not a good boy!
zty598416146 2011-01-13
  • 打赏
  • 举报
回复
学习了 我也不清楚如果前端太大不能通过字符串传入的情况
lxyzxq2008 2011-01-09
  • 打赏
  • 举报
回复
这个就顶下得了,直接插入
zty598416146 2011-01-09
  • 打赏
  • 举报
回复
问下一楼的朋友, 怎么用程序插入特别大的内容,就是如果我从界面输入的内容比较大,无法用字符串变量把插入的值传到数据库的那种情况?
zty598416146 2011-01-09
  • 打赏
  • 举报
回复
一般就是直接插入.有时候读取的时候比较麻烦
jdsnhan 2011-01-09
  • 打赏
  • 举报
回复
依据前端应用程序性质而定,一般都是循环写入或流写入。具体内容百度吧
iihero 2011-01-09
  • 打赏
  • 举报
回复
insert into Tb(content) values('CRMNet');
只要你想插入的内容不超过4000Bytes, 就可以直接插入。
否则得使用程序插入。
feixianxxx 2011-01-09
  • 打赏
  • 举报
回复
....操作lob类型字段


BFILE:

1.

BFILE类型一般用于存储文件。

建立一个目录:

create directory tmp as 'e:\';

建立一个有bfile类型column的表:

create table a(photo bfile);

插入值:

insert into a values(bfilename('tmp','aa.jpg'));

--bfilename('direct','filename')这个函数将文件转换为bfile类型

BLOB:

2.

将图片插入到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;



CLOB:

方法和blob一样。

3.将表中读数据转换为xml并打印:

declare
resultvalue clob;
xmlstr varchar2(32767);
line varchar2(2000);
line_no integer:=1;
begin
resultvalue:=dbms_xmlquery.getXML('select name,sex from employee');--将SQL的查询语句的结果转换成一个clob类型的xml
xmlstr:=dbms_lob.substr(resultvalue,32767);--从clob类型中截取字符串
loop
exit when xmlstr is null;
line:=substr(xmlstr,1,instr(xmlstr,chr(10))-1);--从xmlstr中截取一个字符串,从第一个字符开始,以ascii码为10的字符结尾
dbms_output.put_line(line_no || ':'||line);--打印行号+字符串
xmlstr:=substr(xmlstr,instr(xmlstr,chr(10))+1);--从第一个回车后开始截取字符串到结尾,赋值给xmlstr
line_no:=line_no+1;
end loop;
end;

--主要用到的程序包dbms_xmlquery; dbms_lob;
zhyt08_126 2011-01-09
  • 打赏
  • 举报
回复
这种插入方法是一样的,只有读取时不同

17,377

社区成员

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

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