Utilizar un tipo de dato CLOB en Oracle Forms 6i no es posible, por lo que no queda más que inventar una manera de emularlo.
En el ejemplo adjunto se asume que tenemos una tabla PERSONA con una columna en ella que se llama OBSERVACION_CLOB y una forma con un bloque PERSONA que contiene todas las columnas de la tabla sin el CLOB.
Lo que requerimos es que la columna CLOB de la tabla se pueda mostrar y editar desde la forma.
Paso 1.
Crear un textitem «OBSERVACION_CLOB» en el bloque PERSONA:
Item-Properties:
– Data Type CHAR
– Maximum Length 32000
– Database-Item No
Item-Trigger:
– WHEN-VALIDATE-ITEM
:PERSONA.CODIGO_PERSONA:= :PERSONA.CODIGO_PERSONA;
Block-Trigger:
– POST-QUERY
POQ_PERSONA;
– PRE-UPDATE
PRU_PERSONA;
Program units requerdias por la forma
PROCEDURE POQ_PERSONA IS
V_HILERA VARCHAR2 (1000);
V_INDICE NUMBER := 0;
BEGIN
LOOP
V_HILERA:= LEER_CLOB (:PERSONA.CODIGO_PERSONA, V_INDICE);
IF V_HILERA IS NOT NULL THEN
:PERSONA.OBSERVACION_CLOB := :PERSONA.OBSERVACION_CLOB || V_HILERA;
V_INDICE:= V_INDICE+ 1;
ELSE
EXIT;
END IF;
END LOOP;
END;
PROCEDURE PRU_PERSONA IS
V_HILERA VARCHAR2 (1000);
V_INDICE NUMBER := 0
BEGIN
LIMPIAR_CLOB (:PERSONA.CODIGO_PERSONA);
LOOP
V_HILERA := Substr (:PERSONA.OBSERVACION_CLOB, 1 + V_INDICE * 1000, 1000);
IF V_HILERA IS NOT NULL THEN
AGREGAR_CLOB (:PERSONA.CODIGO_PERSONA, V_HILERA);
V_INDICE:= V_INDICE + 1;
ELSE
EXIT;
END IF;
END LOOP;
END;
Procedimientos requeridos a nivel de base de datos:
PROCEDURE LIMPIAR_CLOB (P_CODPERSONA IN PERSONA.CODIGO_PERSONA%TYPE) IS
BEGIN
UPDATE PERSONA SET OBSERVACION_CLOB = NULL
WHERE CODIGO_PERSONA = P_CODPERSONA;
END;
PROCEDURE APPEND_CLOB (P_EMPNO IN EMP.EMPNO%TYPE, P_STRING IN VARCHAR2) IS
BEGIN
UPDATE EMP SET Note_CLOB = Note_CLOB || P_String
WHERE EMPNO = P_EMPNO;
END;
FUNCTION LEER_CLOB (P_CODPERSONA IN PERSONA.CODIGO_PERSONA%TYPE, P_INDICE IN NUMBER) RETURN VARCHAR2 IS
V_HILERA VARCHAR2 (2000);
BEGIN
SELECT SUBSTR (OBSERVACION_CLOB, 1 + P_INDICE * 1000, 1000)
INTO V_HILERA
FROM PERSONA
WHERE CODIGO_PERSONA = P_CODPERSONA;
RETURN (V_HILERA);
END;