clob类型(oracle)的数据如何用SQL语句(在sql plus中)插入?如能解决,马上给分

时间:2021-08-21 08:15:58
clob类型(oracle)的数据如何用SQL语句(在sql plus中)插入?
因为我想写到存储过程里面,不知如何操作?

19 个解决方案

#1


SQL> create table test_clob
  2  (text clob);
Table created.
SQL> insert into test_clob (text)
  2  values ('12345678');
1 row created.
SQL> insert into test_clob (text)
  2  values ('987654321');
1 row created.
SQL> select * from test_clob;
TEXT
-------------------------------------------------------------------12345678
987654321

#2


我也想知道。

#3


这不是和一般的表的操作一样吗?
怎么在CLOB类型的表中在SQL*PL中插入二进制文件?

#4


感谢 KingSunSha(弱水三千)
这个写到存储过程里应该没有问题吧

还有个问题,这个clob值如何传到存储过程里面,varchar2只能是4000,参数如何写?
我先给你20分,OK?

#5


这儿有我做的关于bile,blob的操作示例文档,oracle8.15调试通过,可以发给需要的同志们。

不过,不好意思啊,我需要点专家分,呵呵。

#6


搞错,是关于bfile,blob的操作示例文档

  :)

#7


如何给你专家分?请告之

#8


如何给你专家分?请告之

#9


to dj12(令少爷) :

你是搂主,本贴的管理,让后给我给分,呵呵,在告诉我你的email,我发给你啊。比较长啊

#10


clob里面存2进制的东西恐怕不行吧,
想存2进制用blob

#11


clob里面存2进制的东西恐怕不行吧,
想存2进制用blob

#12


clob里面存2进制的东西恐怕不行吧,
想存2进制用blob

#13


varchar2类型虽然有长度限制,但是你可以分段读取CLOB列的数据。
要用到dbms_lob包。用一个循环调用dbms_lob.read。
declare
v_text varchar2(32767);--每次读取的数据
v_lob clob;
amt binary_integer:=32767;--每次读取的字节数
pos integer:=1;--读取位置
begin
    select CLOB列 into v_lob where.....;
      loop
            dbms_lob.read(v_lob,amt,pos,v_text);
            pos:=pos+amt; 
            .........   
      end loop;
exception when no_data_found then null;  --退出循环
end;

#14


我的mail:

dingl@nes.com.cn
j2ee@sohu.com
谢谢

#15


to :  lisam(redplane)
我现在是要将一个大文本插入到数据库中,而这个插入的过程我想用存储过程来实现
在数据库中这个大文本的类型为clob

你给出的是怎样读取出来的代码,不管怎样都要谢谢你的,到最后我肯定会给你分的

#16


看到没有,我已经将这个问题的分数又加了20分,如有可能我还会再加的,只要能帮我解决问题即可

谢谢各位!

#17


存储过程实现的话可以调用dbms_lob包直接从操作系统中从文件读入,这样就不用写循环了,我看直接存文件最好还是用blob类型。
看一看这个
http://www.greatchinatelecom.com/card/oracle/clob.htm
http://it.sinohome.com/181224/180804.htm

#18


问题应该是可以解决了

感谢各位了,尤其是 penitent(只取一瓢)、 lisam(redplane) 、 KingSunSha(弱水三千)

很快会结贴给分

#19


declare
v_lob clob;
v_text varchar2(32767);
begin
 ......
 insert into t_tablename
     values(...,empty_clob(),...);
     select clob_column into v_lob from......for update;
     dbms_lob.write(v_lob,length(v_text),1,v_text);    
     commit;
end;
这样只能插入32767字节,你自己可以改一下。

#1


SQL> create table test_clob
  2  (text clob);
Table created.
SQL> insert into test_clob (text)
  2  values ('12345678');
1 row created.
SQL> insert into test_clob (text)
  2  values ('987654321');
1 row created.
SQL> select * from test_clob;
TEXT
-------------------------------------------------------------------12345678
987654321

#2


我也想知道。

#3


这不是和一般的表的操作一样吗?
怎么在CLOB类型的表中在SQL*PL中插入二进制文件?

#4


感谢 KingSunSha(弱水三千)
这个写到存储过程里应该没有问题吧

还有个问题,这个clob值如何传到存储过程里面,varchar2只能是4000,参数如何写?
我先给你20分,OK?

#5


这儿有我做的关于bile,blob的操作示例文档,oracle8.15调试通过,可以发给需要的同志们。

不过,不好意思啊,我需要点专家分,呵呵。

#6


搞错,是关于bfile,blob的操作示例文档

  :)

#7


如何给你专家分?请告之

#8


如何给你专家分?请告之

#9


to dj12(令少爷) :

你是搂主,本贴的管理,让后给我给分,呵呵,在告诉我你的email,我发给你啊。比较长啊

#10


clob里面存2进制的东西恐怕不行吧,
想存2进制用blob

#11


clob里面存2进制的东西恐怕不行吧,
想存2进制用blob

#12


clob里面存2进制的东西恐怕不行吧,
想存2进制用blob

#13


varchar2类型虽然有长度限制,但是你可以分段读取CLOB列的数据。
要用到dbms_lob包。用一个循环调用dbms_lob.read。
declare
v_text varchar2(32767);--每次读取的数据
v_lob clob;
amt binary_integer:=32767;--每次读取的字节数
pos integer:=1;--读取位置
begin
    select CLOB列 into v_lob where.....;
      loop
            dbms_lob.read(v_lob,amt,pos,v_text);
            pos:=pos+amt; 
            .........   
      end loop;
exception when no_data_found then null;  --退出循环
end;

#14


我的mail:

dingl@nes.com.cn
j2ee@sohu.com
谢谢

#15


to :  lisam(redplane)
我现在是要将一个大文本插入到数据库中,而这个插入的过程我想用存储过程来实现
在数据库中这个大文本的类型为clob

你给出的是怎样读取出来的代码,不管怎样都要谢谢你的,到最后我肯定会给你分的

#16


看到没有,我已经将这个问题的分数又加了20分,如有可能我还会再加的,只要能帮我解决问题即可

谢谢各位!

#17


存储过程实现的话可以调用dbms_lob包直接从操作系统中从文件读入,这样就不用写循环了,我看直接存文件最好还是用blob类型。
看一看这个
http://www.greatchinatelecom.com/card/oracle/clob.htm
http://it.sinohome.com/181224/180804.htm

#18


问题应该是可以解决了

感谢各位了,尤其是 penitent(只取一瓢)、 lisam(redplane) 、 KingSunSha(弱水三千)

很快会结贴给分

#19


declare
v_lob clob;
v_text varchar2(32767);
begin
 ......
 insert into t_tablename
     values(...,empty_clob(),...);
     select clob_column into v_lob from......for update;
     dbms_lob.write(v_lob,length(v_text),1,v_text);    
     commit;
end;
这样只能插入32767字节,你自己可以改一下。

#20