You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义函数CasLengthOfLongRaw执行报ORA-00932类型不匹配错误求助

解决ORA-00932: 数据类型不匹配问题

这个错误的核心原因是LONG RAW类型转换逻辑错误,再加上可能的临时表字段类型不匹配。咱们一步步来修复:

1. 确认临时表字段类型

首先检查你的TEMPCSSRPLLOB表,确保LOBFIELD字段的类型是BLOB(不是CLOB)。如果之前是CLOB,需要修改表结构:

ALTER TABLE TEMPCSSRPLLOB MODIFY LOBFIELD BLOB;

2. 修改函数中的转换函数

原函数里用to_lob()转换LONG RAW是错误的——to_lob()仅适用于将LONG类型转换为CLOB,而LONG RAW需要用to_blob()来转换为BLOB类型。修改后的函数如下:

create or replace function CasLengthOfLongRaw( 
    p_tname in varchar2, 
    p_cname in varchar2, 
    p_rowid in rowid 
) return number AUTHID CURRENT_USER as 
    pragma autonomous_transaction; 
    l_length number; 
begin 
    execute immediate 'insert into TEMPCSSRPLLOB(LOBFIELD) 
                       select to_blob(' || p_cname || ') from ' || p_tname || ' where rowid = :x' 
    using p_rowid; 
    select dbms_lob.getlength(LOBFIELD) into l_length from TEMPCSSRPLLOB; 
    commit;
    -- 可选:清空临时表,避免下次执行时旧数据干扰查询结果
    delete from TEMPCSSRPLLOB;
    commit;
    return l_length; 
end; 
/

补充说明

  • to_blob()是Oracle专门用于将LONG RAW转换为BLOB的函数,完美匹配你的场景;
  • 新增的清空临时表步骤,能避免多次执行函数后临时表积累冗余数据,保证长度查询的准确性;
  • 自治事务里的commit是必要操作,因为你在自治事务中执行了DML,必须提交才能释放相关资源。

内容的提问来源于stack exchange,提问作者Urvashi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:05:39