weixin_38647584 2023-01-18 09:19 采纳率: 69.2%
浏览 43

超过4000用到了BLOB类型,新增报错

最近做项目需要往日志表里存放内容,由于字段可能超过4000用到了BLOB类型,数据库oracle
小于4000的正常,超过4000的就报错,报错信息:Cause: java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: raw variable length too long

ORA-06512: at "SYS.UTL_RAW", line 224

这个是我的sql
INSERT INTO "JGPT"."SYS_API_REQUEST_LOG" ( "ID", "CREATE_TIME", "API_PATH", "REQUEST_METHOD", "REQUEST_DATA", "RESPONSE_STATUS", "RESPONSE_DATA", "ERROR_LOG", "CREATE_BY" )
VALUES
    (
        '93d39857-e03b-41bd-a24f-2b464c4c48e8',
        TO_DATE( '2022-12-02 11:22:44', 'SYYYY-MM-DD HH24:MI:SS' ),
        '主动请求PLM接口获取数据',
        'GET',
        utl_raw.cast_to_raw ( '3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D3822207374616E64616C6F6E653D22796573223F3E0A203C53656172636844617461204E756D6265723D2232223E0A20202020203C706172744E756D6265723E46445A313532323131303434323931303031333C2F706172744E756D6265723E0A203C2F536561726368446174613E' ),
        'S',
        utl_raw.cast_to_raw ( '3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E3C7461736B3E3C706172743E3C6E756D6265723E46445A313532323131303434323931303031333C2F6E756D6265723E3C6E616D653E3C2F6E616D653E3C76657273696F6E3E3C2F76657273696F6E3E3C697465726174696F6E3E3C2F697465726174696F6E3E3C70686173653E3C2F70686173653E3C73746174653E3C2F73746174653E3C2F706172743E3C2F7461736B3E' ),
        NULL,
NULL 
    );

怎么修改才能满足超过4000长度正常存储呢?
  • 写回答

3条回答 默认 最新

  • 於黾 2023-01-18 09:27
    关注

    参数化sql,不要拼接成一个长长的字符串执行
    在oracle里varchar2类型最多3500左右,如果少于这个数,你的列直接varchar2就行了,不需要blob
    而如果你的列是blob,就应该参数化sql,直接传入byte数组,而不是拼接成字符串
    sql字符串本质上还是varchar,然后再转成blob,它还是会受3500的限制

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月18日

悬赏问题

  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥15 SSH项目查询始终报错
  • ¥15 请问登录成功后如何获得刚刚登录的用户信息SSH项目
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问