Cómo: |
Lenguajes disponibles: MODIFY, Maintain
La función FIND determina si el valor de datos se encuentra en el campo de origen que se está examinando. La función establece un campo temporal en 1 (un valor que no sea el cero para MODIFY) si el valor de datos se encuentra en el campo de origen de datos; un 0 si no lo está. FIND no cambia la posición actual del archivo examinado en la base de datos. Los valores mayores que cero confirman la presencia de valores de datos, y no el número de casos en el campo de origen de datos.
Además, puede usar FIND en un comando VALIDATE para determinar si el valor de un campo de transacción existe en otro origen de datos de FOCUS. Si el valor del campo no está en ese origen de datos, la función devuelve un valor de 0, provocando el fallo de la prueba de validación y el rechazo de la transacción por parte de la solicitud.
Puede usar cualquier número de FINDs en un comando COMPUTE o VALIDATE. Sin embargo, cuantos más FINDS utilice más aumentará el tiempo de procesamiento y el espacio de búfer en la memoria.
Limitación: FIND no funciona con archivos con contraseñas de DBA diferentes.
NOT FIND es lo contrario de FIND. La función FIND establece un campo temporal en 1 si el valor entrante no está en el origen de datos; en 0 si el valor entrante sí está en el origen de datos.
FIND(fieldname [AS dbfield] IN file);
donde:
Es el nombre del campo que contiene el valor de datos entrante.
Es el nombre del origen de datos cuyos valores se comparan con los valores de campos entrantes.
Maintain - el campo AS es obligatorio y el nombre debe estar cualificado.
Es el nombre del origen de datos de FOCUS.
Maintain - el archivo IN no es necesario ya que el nombre del campo AS es obligatorio y debe estar cualificado.
Nota:
En el siguiente ejemplo, FIND determina si hay un valor de datos en otro origen de datos.
MAINTAIN FILE MOVIES AND VIDEOTRK FOR ALL NEXT MOVIES.MOVIECODE INTO FILMSTK TYPE "RC SHOULD BE 1 WHERE MOVIECODE EXISTS IN BOTH FILES"; TYPE " " COMPUTE RC/I1; COMPUTE I/I1=1; REPEAT FILMSTK.FOCCOUNT COMPUTE RC= FIND(FILMSTK(I).MOVIECODE AS VIDEOTRK.MOVIECODE) TYPE "FOR MOVIECODE = <<FILMSTK(I).MOVIECODE , RC = <<RC" COMPUTE I=I+1; ENDREPEAT END
La salida es:
RC SHOULD BE 1 WHERE MOVIECODE EXISTS IN BOTH FILES FOR MOVIECODE = 001MCA, RC = 1 . . . FOR MOVIECODE = 387PLA, RC = 0 . . . FOR MOVIECODE = 963CBS, RC = 1 TRANSACTIONS: COMMITS = 1 ROLLBACKS = 0 SEGMENTS : INCLUDED = 0 UPDATED = 0 DELETED = 0
En el siguiente ejemplo, FIND determina si hay un valor de datos en el mismo origen de datos.
MAINTAIN FILE CAR COMPUTE RETAIL_COST=31500; COMPUTE CHECK/I1; COMPUTE CHECK= FIND (RETAIL_COST); IF CHECK = 1 THEN GOTO FOUND1 ELSE GOTO NOT1; CASE FOUND1 TYPE "THERE IS A CAR WITH A RETAIL_COST OF <<RETAIL_COST" -* .... ENDCASE CASE NOT1 TYPE "THERE IS NO CAR WITH A RETAIL_COST OF <<RETAIL_COST" -*.... ENDCASE -*.... END
La salida es:
THERE IS A CAR WITH A RETAIL_COST OF 31,500 TRANSACTIONS: COMMITS = 1 ROLLBACKS = 0 SEGMENTS : INCLUDED = 0 UPDATED = 0 DELETED = 0
WebFOCUS |