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;
对于这个功能我正在
第7行的错误和ORA错误 ORA-00932:不一致的数据类型:预期LONG BINARY得到了BLOB ORA-06512:第7行“CASLENGTHOFLONGRAW” 00932. 00000 - “不一致的数据类型:预期%s获得%s”
答案 0 :(得分:0)
The to_lob()
function将LONG
或LONG 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
时,问题实际上似乎是函数执行了您想要的操作,但是您传递了它所支持的操作的不合适的表和列名称的详细信息。 / p>