es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Oráculo prefija datos a un clob.

Tengo un procedimiento (ver caso de prueba más abajo), que funciona bien y agrega datos a un CLOB. Además de agregar los datos al CLOB, estoy encapsulando el VALOR de SYSDATE en etiquetas para poder realizar un seguimiento de cuándo se actualizaron los datos en el CLOB.

Aunque solo estoy mostrando datos con 10-20 caracteres en mi ejemplo, el CLOB puede ser extremadamente grande y, en muchos casos, se concatena dentro de un bloque antes de colocarse en el CLOB.


ALTER SESSION SET NLSDATEFORMAT = 'MMDDYYYY HH24:MI:SS'; CREATE TABLE T( SEQNUM INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL, C CLOB DEFAULT ' ', CREATEDATE DATE DEFAULT SYSDATE ); / INSERT INTO T (C) VALUES (' ') / CREATE OR REPLACE PROCEDURE LOBAPPEND( PCLOB IN OUT CLOB, PTEXT IN VARCHAR2 ) AS LTEXT VARCHAR2(32760); LDATESTRING VARCHAR2(50); BEGIN SELECT '[' || TOCHAR (SYSDATE, 'MMDDYYYY-HH24:MI:SS') || ']' INTO LDATE_STRING FROM DUAL; -- newline each time code is appended for clarity. LTEXT :=CHR(10) || LDATESTRING || CHR(10) || PTEXT || CHR(10) || LDATESTRING||CHR(10); DBMS_LOB.WRITEAPPEND(PCLOB, LENGTH(LTEXT), LTEXT ); END; / DECLARE LCLOB CLOB := EMPTY_CLOB(); BEGIN SELECT C INTO LCLOB FROM T WHERE SEQNUM = 1 FOR UPDATE; LOBAPPEND(LCLOB, RPAD('Z',20,'Z')); LCLOB := EMPTY_CLOB(); SELECT C INTO LCLOB FROM T WHERE SEQNUM = 1 FOR UPDATE; LOBAPPEND(LCLOB, RPAD('Y',10,'Y')); END; /

Estoy intentando algo como esto pero llamando a un procedimiento similar al que se publicó anteriormente.


UPDATE T SET C = RPAD('A',20,'A') || CHR(10) || C WHERE SEQ_NUM = 1 /

Agradezco cualquier sugerencia útil y cambio de diseño, ya que esto aún no se ha implementado. Gracias de antemano a todos los que respondan.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el mismo procedimiento para actualizar el CLOB con los nuevos datos. Puede modificar el procedimiento para aceptar los nuevos datos como un parámetro y luego utilizar la función dbms_lob.writeappend para agregar los nuevos datos al CLOB. También puede utilizar la función dbms_lob.overwrite para sobrescribir los datos existentes en el CLOB con los nuevos datos.

Comments are closed.