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;