在Oracle中从十六进制编码的CLOB转换为BLOB

在Oracle中从十六进制编码的CLOB转换为BLOB,oracle,plsql,blob,binary-data,Oracle,Plsql,Blob,Binary Data,我在CLOB中存储了一些十六进制形式的大型二进制内容,并希望将其转换为BLOB,其中十六进制代码是实际的二进制字节编码: DECLARE -- This would be my 8 byte hex-encoded binary content. Real content is much bigger c CLOB := 'cafebabe12345678'; b BLOB; BEGIN -- Need the implementation of this function

我在CLOB中存储了一些十六进制形式的大型二进制内容,并希望将其转换为BLOB,其中十六进制代码是实际的二进制字节编码:

DECLARE

  -- This would be my 8 byte hex-encoded binary content. Real content is much bigger
  c CLOB := 'cafebabe12345678';
  b BLOB;
BEGIN

  -- Need the implementation of this function
  b := hex_to_blob(c);
END;
/

在Oracle中,使用PL/SQL最简单的方法是什么?

所需的函数可以如下所示:

CREATE OR REPLACE
FUNCTION hex_to_blob (hex CLOB) RETURN BLOB IS
  b BLOB                := NULL;
  s VARCHAR2(4000 CHAR) := NULL;
  l NUMBER              := 4000;
BEGIN
  IF hex IS NOT NULL THEN
    dbms_lob.createtemporary(b, FALSE);

    FOR i IN 0 .. LENGTH(hex) / 4000 LOOP
      dbms_lob.read(hex, l, i * 4000 + 1, s);
      dbms_lob.append(b, to_blob(hextoraw(s)));
    END LOOP;
  END IF;

  RETURN b;
END hex_to_blob;

亲爱的@WernfriedDomscheit。这是一种堆栈溢出特性,建议使用。这是值得鼓励的,因为它将帮助所有未来的访问者和整个平台。我推荐这本有趣的书:。问一个问题,注意底部的“回答你自己的问题”按钮。当然,声誉是一个受欢迎的副作用。干杯,伙计。@WernfriedDomscheit-Stack Overflow被设计成一个伟大问题和答案的存储库。自我回答总是被允许的,并且是受欢迎的。我们甚至允许人们同时发布问题和答案(参见页面-有一个选项“回答你自己的问题”这是有原因的。输入错误:hex_to_clob->hex_to_blob。另外,为什么4000在某个地方是常量,而在其他地方是文本?感谢您提到输入错误。已修复。
l
变量作为
输入输出NOCOPY
值传递给,这就是我们需要该变量的原因。