最近把一个基于mysql的功能改为基于oracle中,出现了字符过长(ORA-07104:字符串文字太长)的错误。
如果直接以平常sql语句来插入我们的文本,文本内容不能超过4000个字符:
update sp_type set sp_html = '文本内容'
mysql的longtext就相当于oracle的clob,但oracle存储修改方式有点不一样,具体如下:
StringBuilder sb = new StringBuilder();
sb.append("update sp_type ");
sb.append(" set SP_HTML =? ");
sb.append(" where SP_ID = ? ");
System.out.println(sb.toString());
final LobHandler lobHandler = new DefaultLobHandler();
getJdbcTemplate().execute( sb.toString(), new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException {
lobCreator.setClobAsCharacterStream(ps, 1, new StringReader(html), html.length());
ps.setString(2, sp_id);
}
});
}
在实现用发现有两个修改的clob的字段时,会导致修改的值相反了。我也不知道为什么,然后就写了两个方法,分开修改。在寻找这个问题的时候,想要知道具体的sql语句,觉得太麻烦了不值得就没做。

本文探讨了将基于MySQL的应用迁移到Oracle时遇到的问题,特别是关于如何处理超过4000字符长度限制的文本数据。文章详细介绍了使用Oracle CLOB类型进行数据存储的方法,并提供了一种通过Java操作CLOB的具体实现。
4195

被折叠的 条评论
为什么被折叠?



