mybatis向oracle批量插入CLOB数据(如果数据超过4000就会报错:仅能绑定要插入 LONG 列的 LONG 值) 5

<foreachcollection="list"item="item"index="index"separator="union">select#{item.conte... <foreach collection="list" item="item" index="index" separator="union"> select #{item.contents,javaType=string,jdbcType=CLOB} from dual </foreach> 而且这个循环只能插入第一条数据,之后的数据都差不进去是怎么回事呀 展开
 我来答
匿名用户
2015-01-18
展开全部
参考下面的步骤
--clob测试表
create table t_clob(seq int,str clob);
insert into t_clob select rownum ,rpad('a',4000,'*') str from dual connect by rownum<=10;
update t_clob set str=str||rpad('b',4000,'*')||rpad('c',4000,'*');
commit;
select * from t_clob;
 
--源数据库
--1.将clob字段的数据按4000转为多行保存到临时表中
create table t_clob_bak as 
SELECT seq,cast(substr(str,(level-1)*4000,4000) as varchar2(4000)) str
  FROM t_clob
CONNECT BY LEVEL <= trunc(length(str) / 4000)
       AND PRIOR seq = seq
       AND prior dbms_random.value IS NOT NULL;
select * from t_clob_bak;
--2.将t_clob_bak 导出t_clob_bak.sql文件(create+insert脚本)
 
--目标数据库
--1.执行t_clob_bak.sql,创建和导入临时表数据
--2.执行下面sql,将临时表数据转换到正式表t_clob
insert into t_clob 
SELECT seq, str
  FROM (SELECT seq,
               wm_concat(str) over(PARTITION BY seq ORDER BY rownum) str,
               row_number() over(PARTITION BY seq ORDER BY rownum DESC) rn
          FROM t_clob_bak)
WHERE rn = 1;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式