暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 获取CLOB列的长度(以字节为单位)

askTom 2016-02-15
927

问题描述

你好,汤姆,

我有一个带有CLOB列的表:


create table plch_clob
(i int primary key, x clob);

begin
   for indx in 1 .. 1000 loop
      insert into plch_clob( i, x) values (indx, 'CLOB Row: ' || indx);
   end loop;
   
   commit;
end;



通过调用函数dbms_lob.get-t ,我获得每个CLOB的总字符数:

select i, DBMS_LOB.GETLENGTH(x) len
from plch_clob
order by i desc


但我需要找出每一行的CLOB列的长度byte,以及CLOB的总长度和平均长度,始终以字节为单位。
最好的方法是什么?

先谢了

利维奥

专家解答

正如MOS注释790886.1中所述,没有可用于执行此操作的函数。你得自己写。

如果输入是blob ,则dbms_lob.get-Lage给出以字节为单位的长度。所以他们提供的解决方案是将球转化为一团。然后测量斑点的长度:

create or replace function cloblengthb(p_clob in clob ) return number
as
  v_temp_blob BLOB;
  v_dest_offset NUMBER := 1;
  v_src_offset NUMBER := 1;
  v_amount INTEGER := dbms_lob.lobmaxsize;
  v_blob_csid NUMBER := dbms_lob.default_csid;
  v_lang_ctx INTEGER := dbms_lob.default_lang_ctx;
  v_warning INTEGER;
  v_total_size number := 0; -- Return total clob length in bytes
BEGIN
  IF p_clob is not null THEN
    DBMS_LOB.CREATETEMPORARY(lob_loc=>v_temp_blob, cache=>TRUE);
    DBMS_LOB.CONVERTTOBLOB(v_temp_blob, p_clob,v_amount,v_dest_offset,v_src_offset,v_blob_csid,v_lang_ctx,v_warning);
    v_total_size := DBMS_LOB.GETLENGTH(v_temp_blob);
    DBMS_LOB.FREETEMPORARY(v_temp_blob);
  ELSE
    v_total_size := NULL;
  END IF;
  return v_total_size;
end cloblengthb;
/

create table plch_clob
(i int primary key, x clob);

begin
   for indx in 1 .. 1000 loop
      insert into plch_clob( i, x) values (indx, 'éé CLOB Row: ' || indx);
   end loop;
   
   commit;
end;
/

select cloblengthb(x), dbms_lob.getlength(x) from plch_clob
where  rownum = 1;

                         CLOBLENGTHB(X)                   DBMS_LOB.GETLENGTH(X)
--------------------------------------- ---------------------------------------
                                     16                                      14

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论