estoy añadiendo mi comentario como respuesta porque resuelve el problema original para una gama más amplia de casos que la respuesta aceptada. Nota: aún debe conocer la longitud máxima y la proporción aproximada de caracteres de varios bytes que tendrán sus datos.
Si tiene un CLOB mayor que 4000 bytes, necesita usar DBMS_LOB.SUBSTR en lugar de SUBSTR. Tenga en cuenta que los parámetros cantidad y offset se invierten en DBMS_LOB.SUBSTR.
A continuación, puede que necesite subcadena una cantidad inferior a 4000, ya que este parámetro es el número de caracteres, y si usted tiene caracteres de múltiples bytes entonces 4000 caracteres será de más de 4000 bytes larga, y obtendrás ORA-06502: PL/SQL: numeric or value error: character string buffer too small
porque el resultado de la subcadena necesita caber en un VARCHAR2 que tiene un límite de 4000 bytes. La cantidad exacta de caracteres que puede recuperar depende del número promedio de bytes por carácter en sus datos.
Así que mi respuesta es:
LENGTHB(TO_CHAR(DBMS_LOB.SUBSTR(<CLOB-Column>,3000,1)))
+NVL(LENGTHB(TO_CHAR(DBMS_LOB.SUBSTR(<CLOB-Column>,3000,3001))),0)
+NVL(LENGTHB(TO_CHAR(DBMS_LOB.SUBSTR(<CLOB-Column>,6000,6001))),0)
+...
donde puede añadir tantos trozos como sea necesario para cubrir su CLOB más larga, y ajustar el tamaño del trozo de acuerdo con bytes-per-carácter de sus datos promedio.
¿Por qué le preocupa el tamaño en bytes del CLOB? – Thanatos
No es el OP, pero en mi caso estaba recuperando CLOBS en un enlace de base de datos y tuve que cortarlos en fragmentos de 4000 bytes, y quería saber cuántos fragmentos necesitaba para mis datos. –
esto es una locura, quiero exprimir chino clob en varchar2 y no puedo hacerlo porque no puedo determinar el tamaño – Toolkit