ORA-06502: PL/SQL: 数字或值错误 : invalid LOB locator specified: ORA-22275

[65000][6502]
    ORA-06502: PL/SQL: 数字或值错误 : invalid LOB locator specified: ORA-22275
    ORA-06512: 在 "SYS.DBMS_LOB", line 639
    ORA-06512: 在 "DMDEV.PLJSON_PRINTER", line 133
    ORA-06512: 在 "DMDEV.PLJSON_PRINTER", line 233
    ORA-06512: 在 "DMDEV.PLJSON_PRINTER", line 264
    ORA-06512: 在 "DMDEV.PLJSON_PRINTER", line 285
    ORA-06512: 在 "DMDEV.PLJSON", line 374
    ORA-06512: 在 line 8

增加dbms_lob.createtemporary(temp, TRUE);即可,例如下图一错误,图二正常

dbms_lob.createtemporary(temp, TRUE);  --先初始化创建即可

图一:

图二:

'{"respCode":"00000","respDesc":"success","result":{ "bizCode": "0000", "bizDesc": "SC01340T19010400000001", "orderInfo": [ { "orderNum": "20190103165421", "channelId": "CQ.LZ.HH.01", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业厅", "createTime": "20200902121133", "orderStatus": 2, "amountReceivable": 3455, "bpName": "家庭宽带权益包1", "bpId": "mobilband.pkg.999.01", "bpSmallPic": "1", "orderId": "23486599239852318", "channelOrderId": "33486599239852318" }, { "orderNum": "20190103165422", "channelId": "CQ.LZ.HH.02", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业厅2", "createTime": "20200802121133", "orderStatus": 1, "amountReceivable": 34566255, "bpName": "家庭宽带权益包2", "bpId": "mobilband.pkg.999.02", "bpSmallPic": "1", "orderId": "23486599239852319", "channelOrderId": "33486599239852319" }, { "orderNum": "20190103165423", "channelId": "CQ.LZ.HH.03", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业3", "createTime": "20200902121134", "orderStatus": 2, "amountReceivable": 43, "bpName": "家庭宽带权益包3", "bpId": "mobilband.pkg.999.03", "bpSmallPic": "1", "orderId": "23486599239852310", "channelOrderId": "33486599239852320" }, { "orderNum": "20190103165424", "channelId": "CQ.LZ.HH.04", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业4", "createTime": "20200902121133", "orderStatus": 5, "amountReceivable": 75, "bpName": "家庭宽带权益623", "bpId": "mobilband.pkg.999.998", "bpSmallPic": "1", "orderId": "23486599239852314", "channelOrderId": "3348659923985235" }, { "orderNum": "20190103165427", "channelId": "CQ.LZ.HH.07", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业厅45", "createTime": "20200902121133123", "orderStatus": 1, "amountReceivable": 3455, "bpName": "家庭宽带权益6612", "bpId": "mobilband.pkg.999.124", "bpSmallPic": "1", "orderId": "1231412512512", "channelOrderId": "534551235125125125" }, { "orderNum": "20190103165421", "channelId": "CQ.LZ.HH.01", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业厅", "createTime": "20200902121133", "orderStatus": 2, "amountReceivable": 3455, "bpName": "超级QQ权益产品包", "bpId": "super.qq.pkg.999.01", "bpSmallPic": "1", "orderId": "23486599239852363", "channelOrderId": "33486599239852335" }, { "orderNum": "20190103165421", "channelId": "CQ.LZ.HH.01", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业厅", "createTime": "20200902121133", "orderStatus": 1, "amountReceivable": 3455, "bpName": "家庭宽带权益包1", "bpId": "mobilband.pkg.999.01", "bpSmallPic": "1", "orderId": "23486599239852318", "channelOrderId": "33486599239852318" }, { "orderNum": "20190103165421", "channelId": "971", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业厅sdgsd", "createTime": "20200902121133", "orderStatus": 2, "amountReceivable": 3455, "bpName": "家庭宽带权益包1", "bpId": "mobilband.pkg.999.01", "bpSmallPic": "1", "orderId": "23486599239852318", "channelOrderId": "33486599239852318" }, { "orderNum": "201901031654223521", "channelId": "971", "channelName": "重庆市重???区重庆街道办事处龙奥大厦营业厅ehds", "createTime": "20200902121133", "orderStatus": 1, "amountReceivable": 3455, "bpName": "家庭宽带权益包1", "bpId": "mobilband.pkg.999.01", "bpSmallPic": "1", "orderId": "23486599239852318", "channelOrderId": "33486599239852318" }, { "orderNum": "201901031654214632523", "channelId": "CQ.LZ.HH.01", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营业厅gsdg", "createTime": "20200902121133", "orderStatus": 2, "amountReceivable": 3455, "bpName": "超级QQ普通权益包", "bpId": "chaojiqq.pkg.999.01", "bpSmallPic": "1", "orderId": "23525235235235", "channelOrderId": "33486599239852318325" }, { "orderNum": "2019010316542142523", "channelId": "CQ.LZ.HH.099", "channelName": "重庆市重庆区重庆街道办事处龙奥大厦营合适的话业厅gsdg", "createTime": "20200902121133", "orderStatus": 2, "amountReceivable": 344365, "bpName": "超级QQ普通权益包", "bpId": "chaojiqq.pkg.999.01", "bpSmallPic": "1", "orderId": "2352523523523465", "channelOrderId": "33486599232318325" } ] } }' responseexample CLOB,这个字段类型是CLOB按理应该不限长度,这是一个字段的数据,像这种数据这个字段插不进去有啥办法嘛
最新发布
08-16
在插入 Oracle 的 CLOB 类型字段时,可能会遇到诸如 `ORA-22275: invalid LOB locator specified` 等错误,这些问题通常与 LOB 定位符的处理方式有关。以下是几种解决 CLOB 字段插入失败的方法: ### 插入 CLOB 字段时的处理方法 1. **使用 `OracleConnection` 创建临时 CLOB 对象** 插入数据时,如果直接使用 `CLOB.empty_lob()` `CLOB.getEmptyCLOB()`,可能会导致异常。推荐使用 Oracle 提供的 API 创建临时 CLOB 对象。 ```java Connection connection = preparedStatement.getConnection(); OracleConnection oracleConnection = connection.unwrap(OracleConnection.class); CLOB clob = CLOB.createTemporary(oracleConnection, true, 1, (short) 1); clob.setString(1, "需要插入的CLOB内容"); preparedStatement.setClob(1, clob); // 将 clob 设置到 PreparedStatement 中 ``` 2. **使用 MyBatis 自定义 `TypeHandler` 处理 CLOB** 如果使用 MyBatis 框架操作数据库,可以通过自定义 `TypeHandler` 来处理 CLOB 类型字段。在配置文件中注册该处理器,并确保其在 `<typeHandlers>` 标签中正确配置。 ```java public class OracleClobTypeHandler implements TypeHandler<String> { @Override public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { CLOB clob = CLOB.createTemporary(ps.getConnection().unwrap(OracleConnection.class), true, 1, (short) 1); clob.setString(1, parameter); ps.setClob(i, clob); } // 其他方法省略... } ``` 在 MyBatis 配置文件中注册: ```xml <typeHandlers> <typeHandler handler="com.example.OracleClobTypeHandler" javaType="java.lang.String"/> </typeHandlers> ``` 3. **直接使用 SQL 插入 CLOB 数据** 如果数据量较小,可以直接使用 SQL 语句插入 CLOB 数据。例如: ```sql INSERT INTO your_table (id, clob_column) VALUES (1, '这是一个CLOB字段的内容'); ``` 对于大文本数据,可以使用绑定变量方式插入,避免 SQL 注入问题。 4. **批量插入时使用 `<foreach>` 和动态 SQL** 如果需要批量插入数据,可以结合 MyBatis 的 `<foreach>` 标签进行处理,确保每条记录的 CLOB 数据都能正确插入。 ```xml <insert id="batchInsert"> BEGIN <foreach collection="list" item="item" index="index" separator=";"> INSERT INTO ${tableName} (id, error_detail, create_date) VALUES (#{item.id}, #{item.errorDetail}, #{item.createDate}) </foreach>; END; </insert> ``` 5. **CLOB 数据读取与转换** 在读取 CLOB 数据时,可以将其转换为字符串进行处理。以下是一个将 CLOB 转换为 `String` 的示例方法: ```java public static String clobToString(Clob clob) throws Exception { Reader reader = clob.getCharacterStream(); BufferedReader br = new BufferedReader(reader); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); reader.close(); return sb.toString(); } ``` 6. **检查 LOB 段存储情况** 如果插入的 CLOB 数据较大,可能需要检查数据库LOB 段的存储情况。可以使用以下 SQL 查询 LOB 段的大小: ```sql SELECT segment_name AS TABLENAME, bytes / 1024 / 1024 MB FROM user_segments WHERE segment_name = 'SYS_LOB0001313121C00015$$'; ``` ### 常见问题及注意事项 - **避免使用废弃方法**:如 `CLOB.empty_lob()` 和 `parameterMap` 等已被淘汰的方法,避免引发兼容性问题。 - **确保连接有效性**:在创建 CLOB 对象时,确保使用有效的 `OracleConnection` 实例,否则可能抛出异常。 - **数据大小限制**:CLOB 字段支持存储非常大的文本数据,但需注意数据库和应用层的性能限制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值