tipo manejo dato oracle oracle11g lob

dato - manejo de clob en oracle



Trabajando con datos de texto muy grandes y columna CLOB (2)

Debe usar el paquete dbms_lob , el procedimiento para agregar una cadena al clob es dbms_lob.append .

Documentación DBMS_LOB

declare c1 clob; c2 varchar2(32000); begin c1 := ''abc''; c2 := ''text, which contains 32 000 characters''; dbms_lob.append(c1, c2); c2 := ''some more text, which contains 32 000 characters''; dbms_lob.append(c1, c2); insert into t1 values (c1); end;

De acuerdo con las columnas de tipo de datos CLOB y NCLOB, puede almacenar hasta 8 terabytes de datos de caracteres.

Tengo texto, que contiene 100 000 caracteres, ¿cómo puedo ejecutar consultas como esta?

UPDATE my_table SET clob_column = ''text, which contains 100 000 characters'' WHERE id = 1

?

Si en el texto, el recuento de caracteres es hasta 32767, es posible usar el bloque anónimo PL / SQL:

DECLARE myvar VARCHAR2(15000); BEGIN myvar := ''text, which contains 100 000 characters''; UPDATE my_table SET clob_column = myvar WHERE id = 1; .... END;

¿Cuál es la solución, donde el texto es muy grande y contiene, por ejemplo, 100 000 caracteres?

actualizar

Estoy intentando con dbms_lob.append :

create table t1 (c clob); declare c1 clob; c2 clob; begin c1 := ''abc''; c2 := ''text, which contains 100 000 characters''; dbms_lob.append(c1, c2); insert into t1 values (c1); end;

Sin embargo, también tiene error: string literal too long .

Estoy haciendo algo mal ?


Encontré esta pregunta mientras buscaba en Google cómo anexar datos a un CLOB. Para mi problema particular, estoy usando un sistema PL / SQL heredado en el que no puedo usar el paquete dbms_lob , así que pensé que podría compartir mi respuesta en beneficio de otros en mi situación.

Solución: utilice la CONCAT function in a de Oracle CONCAT function in a query, the SELECT query, the function works for the CONCAT function works for the tipo de datos CLOB. Por ejemplo (usando el ejemplo de @ AlenOblak):

declare c1 clob; c2 varchar2(32000); begin c1 := ''abc''; c2 := ''text, which contains 32 000 characters''; SELECT CONCAT(c1, c2) INTO c1 FROM DUAL; c2 := ''some more text, which contains 32 000 characters''; SELECT CONCAT(c1, c2) INTO c1 FROM DUAL; insert into t1 values (c1); end;

Espero que ayude.