Preguntar si un dato ya existe en el bloque

Tengo una forma en forms 6i. La forma tiene un bloque de datos que se muestra en forma tabular para ir llenado allí los datos.
Necesito que en una de las columnas, cuando el usuario ingrese el dato, la forma revise si ese dato ya existe en esa columna y me lo diga.
Si trato de recorrer el bloque en cualquier trigger de la columna me va a decir que no puedo recorrer así la columna ademas de perder el foco del dato que quiero.
¿Hay alguna función que me permita solucionar mi requerimiento?
Muchas gracias de antemano
{"lat":3.86245626718296,"lng":-73.5986137390137}

1 respuesta

Respuesta
1
No hay ninguna función para esto oracle lo controla cuando haces el commit si tienes un PORQUE o una UK, te salta el error que puedes capturarlo con el ON-ERROR.
La mejor forma es crearse un record group, validar contra el RG e irlo rellenando con los códigos en el when-validate-item.
Eso del record group suena interesante. Si no es mucha molestia, ¿me podrías decir como válido en el when-validate-item que el dato no es en el RG?
Tienes que recorrerlo y compara el calor del campo con el del record group.
Te paso un ejemplo de una función wue busca un valor en un RG y te devuelve en que posición esta o 0 si no lo encuentra.
FUNCTION Is_Value_In_List( the_value VARCHAR2,
the_rg_name VARCHAR2,
)
RETURN NUMBER IS
the_Rowcount NUMBER;
rg_id RecordGroup;
gc_id GroupColumn;
col_val VARCHAR2(80);
Exit_Function Exception;
BEGIN
/*
** Determine if record group exists, and if so get its ID.
*/
rg_id := Find_Group( the_rg_name );
IF Id_Null(rg_id) THEN
Message('Record Group '||the_rg_name||' does not exist.');
RAISE Exit_Function;
END IF;
/*
** Make sure the column name specified exists in the
** record Group.
*/
/*
** Get a count of the number of records in the record
** group
*/
the_Rowcount := Get_Group_Row_Count( rg_id );
/*
** Loop through the records, getting the specified column's
** value at each iteration and comparing it to 'the_value'
** passed in. Compare the values in a case insensitive
** manner.
*/
FOR j IN 1..the_Rowcount LOOP
col_val := GET_GROUP_CHAR_CELL( the_rg_name||'.'||'tu_columna', j );
/*
** If we find a match, stop and return the
** current row number.
*/
IF UPPER(col_val) = UPPER(the_value) THEN
RETURN j;
END IF;
END LOOP;
/*
** If we get here, we didn't find any matches.
*/
RAISE Exit_Function;
EXCEPTION
WHEN Exit_Function THEN
RETURN 0;
END;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas