首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将F983051.VRPODATA (long / blob)转换为字符串(varchar2)?

如何将F983051.VRPODATA (long / blob)转换为字符串(varchar2)?
EN

Stack Overflow用户
提问于 2018-06-01 02:46:47
回答 2查看 831关注 0票数 1

如何将F983051.VRPODATA (long / blob)转换为字符串(varchar2)?

我不确定我是否可以这样做:

代码语言:javascript
复制
SELECT VRPID, VRVERS, FUNCTION(VRPODATA) FROM SCHEMA.F983051;

其中函数是将BLOB文件转换为varchar2的函数。

警察。我不能使用任何类型的DDL。

请指教,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-25 09:33:09

我实际上找到了我想要的: DBMS_LOB.SUBSTR({BLOB field})。

该字段可以帮助您处理BLOB和HUGEBLOB数据类型,但它可能无法识别所有值。它会将它们替换为正方形。

示例:

代码语言:javascript
复制
SELECT DBMS_LOB.SUBSTR({Huge Blob Field}) FROM {Table};

如果你能做到这一点,那就是正确的选择。

干杯。

票数 0
EN

Stack Overflow用户

发布于 2018-06-01 05:43:15

请注意,我没有使用CONVERTTOCLOB的经验,因为我们总是使用ClOBs来存储文本。参考Rene的answer,你可以这样做:

代码语言:javascript
复制
CREATE TABLE F983051 (vrpid NUMBER, vrvers NUMBER, vrpodata BLOB) 
  LOB (vrpodata) STORE AS SECUREFILE;

INSERT INTO F983051(vrpid, vrvers, vrpodata) 
VALUES (1, 2, rawtohex('Hello world'));

CREATE OR REPLACE FUNCTION myblobtovarchar(p_blob BLOB) 
  RETURN VARCHAR2 DETERMINISTIC
IS
  l_len          number;
  l_clob         clob;
  l_dest_offsset integer := 1;
  l_src_offsset  integer := 1;
  l_lang_context integer := dbms_lob.default_lang_ctx;
  l_warning      integer;
  l_varchar      varchar2(32767);
BEGIN
  IF p_blob IS NULL THEN RETURN NULL; END IF;

  DBMS_LOB.CREATETEMPORARY(lob_loc => l_clob, cache => false);

  l_len := DBMS_LOB.GETLENGTH(p_blob);

  IF l_len > 4000 THEN l_len := 4000; END IF;

  DBMS_LOB.CONVERTTOCLOB(dest_lob     => l_clob,
                         src_blob     => p_blob,
                         amount       => l_len,
                         dest_offset  => l_dest_offsset,
                         src_offset   => l_src_offsset,
                         blob_csid    => dbms_lob.default_csid,
                         lang_context => l_lang_context,
                         warning      => l_warning);

  l_varchar := DBMS_LOB.SUBSTR(l_clob, 32767, 1);

  RETURN l_varchar;
END myblobtovarchar;
/

SELECT vrpid, vrvers, myblobtovarchar(vrpodata) FROM F983051;
1   2   Hello world

如果你不能创建函数,你可以尝试一下(我也没有经验):

代码语言:javascript
复制
SELECT utl_raw.cast_to_varchar2(dbms_lob.substr(vrpodata, 4000)) FROM F983051;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50630879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档