您的位置:首页 > 数据库 > Oracle

hibernate通过hql语句查询oracle的clob数据的时候,将clob转换成string时报错

2020-02-07 01:46 573 查看

java.io.IOException: ORA-06550: 第 1 行, 第 7 列: PLS-00201: 必须声明标识符 'DBMS_LOB' ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored


PLS-00201: 必须声明标识符 ‘DBMS_LOB’
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored)

hibernate通过hql查询oracle的clob数据的时候,通过流将clob转换成string时报错

代码如下:

public static String clobToString(Clob clob) {
StringBuffer buffer = new StringBuffer();
if (clob != null) {
try (Reader r = clob.getCharacterStream();
BufferedReader br = new BufferedReader(r)) {
String s = null;
while ((s = br.readLine()) != null) {
buffer.append(s);
}
} catch (Exception e) {
LOG.WRITE_SERVER("clob转换String异常:",e);
}
}
return buffer.toString();
}

报错:
java.io.IOException: ORA-06550: 第 1 行, 第 7 列:
PLS-00201: 必须声明标识符 ‘DBMS_LOB’
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored

原因

百度了一下,基本上回答都是说没有’DBMS_LOB’权限的原因,但是公司数据库权限不能随便给你,所以不能通过给权限的方法尝试解决,而且系统框架是很老的ssh,试了几个方法没有解决

解决

之前是通过hibernate的映射使用hql查询的,但是走不通,我就试着通过sql查询clob,sql语句为
select dbms_lob.substr(clob字段名) from 表名
select to_char(clob字段名) from 表名
很明显,第一条sql语句dbms_lob.substr()要权限,而我是没有权限的,这时候只能使用第二条sql语句,不过这个sql语句有缺点,只能在clob的长度小于4000的时候使用
使用hibernate通过sql语句进行查询,返回的是一个string对象,这个时候就可以读取到了.

  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq2576519645 发布了2 篇原创文章 · 获赞 0 · 访问量 492 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐