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
.
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.