还是没有找得可以直接判断CLOB的字节数的函数,
不过如下的方法也许可以对你有用
[php]
SQL> select id, cc from clob_test;
ID CC
---------- --------------------------------------------------------------------------------
1 1你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你?
2 2我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我?
3 3他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他他?
3 rows selected
--clob_test中的三条记录中, 1有1000个"你"字, 2有2000个"我"字, 3有3000个"他"字
SQL> --如果只有一条记录, 可以这样
SQL> select id, sum(lenb) as lenb
2 from (select t.id,
3 lengthb(dbms_lob.substr(t.cc, 1000, (level - 1) * 1000 + 1)) as lenb
4 from (select * from clob_test where id = 1) t
5 connect by level <= ceil(dbms_lob.getlength(t.cc) / 1000))
6 group by id
7 /
ID LENB
---------- ----------
1 3001
1 row selected
SQL> --如果是多条, 可以这样
SQL> select id, sum(lenb) as lenb
2 from (
3 select t.id, b.lev, lengthb(dbms_lob.substr(t.cc, 1000, (b.lev-1)*1000+1)) as lenb
4 from (select level as lev from dual connect by level<=100) b,
5 (select id, ceil(dbms_lob.getlength(cc) / 1000) as times from clob_test) a,
6 clob_test t
7 where a.id=t.id and a.times>=b.lev
8 )
9 group by id
10 /
ID LENB
---------- ----------
1 3001
2 6001
3 9001
3 rows selected
[/php]
但是你要注意最后一句sql中的connect by level<=100, 我在这里设了100, 但是实际clob可以存放4G的数据, 按照1000个字符来分段, 如果考虑4g的话, level后面的值就大了
但是如果那个值大了, 整个sql执行就会变得很慢,
希望你的实际数据中没有太大的数据, 如果有, 那需要另想办法了