这两天群里在讨论一个关于clob字段长度和大小计算的问题,搜了一下网上确实没现成计算clob的函数。现提供一个计算clob字段大小的函数,以便各位同学使用。
CREATE OR REPLACE FUNCTION GET_CLOB_LENGTHB(P_STRING IN CLOB) RETURN INTEGER IS C_MAX_LENGTH CONSTANT INTEGER := 10922; I INTEGER; V_LENGTH INTEGER; V_LENGTHB INTEGER; V_STRING VARCHAR2(32767); BEGIN V_LENGTH := NVL(DBMS_LOB.GETLENGTH(P_STRING), 1); I := 1; V_LENGTHB := 0; WHILE (I <= V_LENGTH) LOOP V_STRING := DBMS_LOB.SUBSTR(P_STRING, C_MAX_LENGTH, I); V_LENGTHB := V_LENGTHB + LENGTHB(V_STRING); I := I + C_MAX_LENGTH; END LOOP; RETURN NVL(V_LENGTHB, 0); END;
验证脚本
create table clob_test( test clob); insert into clob_test VALUES ('aBcdefGhijklmno'); insert into clob_test VALUES ('小枫你好啊'); insert into clob_test VALUES ('小枫你好啊a'); select LENGTHB('aBcdefGhijklmno'),LENGTHB('小枫你好啊'),lengthb(('小枫你好啊a')) from dual; select get_clob_lengthb(t1.test),dbms_lob.getlength(t1.test),t1.test from clob_test t1;