当前位置: 首页 > 知识库问答 >
问题:

ORA-00932:不一致的数据类型:需要长二进制got BLOB

申屠项明
2023-03-14
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_lob(' || p_cname || ')  
   from ' || p_tname || '  
   where rowid = :x' using p_rowid;  
   select dbms_lob.getlength(LOBFIELD) into l_length  
   from TEMPCSSRPLLOB;  
   commit;  
    return  l_length;  
end; 

对于这个函数,我得到了

错误ORA-00932:不一致的数据类型:预期的长二进制得到BLOB ORA-06512:在“CaslengthoFlongraw”,第7行009 32。00000-“不一致的数据类型:应为%s得到%s”

共有1个答案

章学义
2023-03-14

to_lob()函数将longlong raw值转换为LOB。

从错误消息来看,目标列lobfield是一个blob,因此它希望变量p_tname.p_cname标识的源列是数据类型long raw。显然,从消息来看,它已经是一个blob,所以不需要转换:

...
   execute immediate 
   'insert into TEMPCSSRPLLOB(LOBFIELD)  
   select ' || p_cname || '  
   from ' || p_tname || '  
   where rowid = :x' using p_rowid;  
...

但是,由于该函数名为caslengthoflongraw,实际上问题似乎是,该函数执行您想要的操作,但您传递给它的是一个不适合它要执行的操作的表和列名的详细信息。

 类似资料: