Oracle RawToHex函数 – 如果返回值超过varchar2限制会发生什么
Oracle 11g中的RawToHex函数返回任何原始值的十六进制表示形式.
此函数将Hex值作为varchar2返回. 如果我将BLOB传递给RawToHex()函数会导致十六进制表示超过varchar2限制4000,会发生什么? 有没有办法将非常大的BLOB转换为十六进制表示? 更新: 我做了一些调查,找到了问题第一部分的答案. DECLARE a varchar2(32767); b blob; BEGIN select blob_column into b from a_table where a_table_id = 1; dbms_output.put_line(dbms_lob.getlength(b)); --> output: 216 dbms_output.put_line(rawtohex(empty_blob())); --> converted blob select blob_column into b from a_table where a_table_id = 2; dbms_output.put_line(dbms_lob.getlength(b)); --> output: 140000 dbms_output.put_line(rawtohex(empty_blob())); --> ORA-06502: PL/SQL: numeric or value error END; 根据ora-code.com描述该错误
更新2: 我有一个解决这个问题的方法.将blob拆分为更小的块并逐步转换它们.它提供了正确的结果.这是一种正确的方法还是可以在某个时候解决这个问题? function BlobToHex(data in blob) return clob is v_clob clob; v_start pls_integer := 1; v_buffer pls_integer := 4000; begin if data is null then return '""'; end if; dbms_lob.createtemporary(v_clob,true); dbms_lob.append(v_clob,'0x'); for i in 1..ceil(dbms_lob.getlength(data) / v_buffer) loop dbms_lob.append(v_clob,rawtohex(DBMS_LOB.SUBSTR(data,v_buffer,v_start))); v_start := v_start + v_buffer; end loop; return v_clob; end; 解决方法你会得到ORA-00932SQL> select rawtohex(empty_blob()) from dual; select rawtohex(empty_blob()) from dual * ERROR at line 1: ORA-00932: inconsistent datatypes: expected - got BLOB SQL> 因为
如the documentation所述. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |