En esta sección: |
A la hora de incluir un argumento en una función, tenga en cuenta los tipos de argumentos que son admisibles, el formato y longitud de estos argumentos, y el número y orden de los mismos.
Los siguientes argumentos son admisibles para una función:
CURR_SAL * 1.03
y
FN || LN
Dependiendo de la función, el argumento puede estar en formato alfanumérico, numérico o de fecha. Si proporciona un argumento en el formato equivocado, se produce un error en la función o la función devuelve datos incorrectos. Estos son los tipos de formatos de argumento:
Todos los argumentos numéricos se convierten al formato de punto flotante de doble precisión, al usarse en una expresión, aunque los resultados se devuelven en el formato especificado del campo de salida.
Si proporciona un argumento con un año de dos dígitos, la función asigna un siglo en base a las configuraciones de parámetro DATEFNS, YRTHRESH y DEFCENT.
Los argumentos se pasan a las funciones mediante por referencia, es decir, que se pasa la ubicación del argumento en la memoria. No se aporta ninguna indicación sobre la longitud del argumento.
Debe proporcionar la longitud del argumento en cadenas alfanuméricas. Algunas funciones requieren la longitud de los argumentos de entrada y de salida (por ejemplo, SUBSTR), mientras que otras emplean la misma longitud para ambos argumentos (por ejemplo, UPCASE).
Asegúrese de que todas las longitudes sean las correctas. La introducción de una longitud incorrecta puede causar resultados incorrectos:
Algunas rutinas de sistema operativo son muy sensibles a las longitudes incorrectas y las leen en las áreas de memoria formateadas de forma errónea.
El número de argumentos obligatorio varía según la función. Las funciones proporcionadas por Information Builders pueden requerir hasta seis argumentos. Las subrutinas escritas por los usuarios pueden requerir un máximo de 200 argumentos, incluido el argumento de salida. Si una función requiere más de 200 argumentos, debe hacer dos o más llamadas para pasar los argumentos a la función.
Los argumentos deben especificarse en el orden mostrado en la sintaxis de cada función. El orden obligatorio varía de una función a otra.
Cómo: |
La propiedad USERFCHK controla el nivel de verificación aplicado a los argumentos de las funciones DEFINE FUNCTION y de las proporcionadas por Information Builders. No afecta a la verificación del número de parámetros; el número correcto siempre debe haber sido proporcionado.
USERFCHK no es compatible con Maintain.
Normalmente, las funciones esperan que los parámetros sean de un tipo específico o tengan una longitud dependiente del valor de otro parámetro. En determinadas situaciones, es posible controlar el cumplimiento de estas reglas mediante el truncamiento de un parámetro, evitando que se produzca un error en tiempo de ejecución.
El nivel de verificación y la posible conversión en un formato válido, depende de la función específica. En la mayoría de los casos, las dos siguientes situaciones pueden convertirse satisfactoriamente:
La verificación de parámetros sólo puede activarse para DEFINE FUNCTIONs y funciones proporcionadas por Information Builders. Si su sitio presenta una función escrita localmente, con el mismo nombre que la proporcionada por Information Builders, la propiedad USERFNS se encarga de determinar la función utilizada.
SET USERFNS= {SYSTEM|LOCAL}
donde:
Da prioridad a las funciones proporcionadas por Information Builders. El valor predeterminado es SYSTEM. Esta propiedad es obligatoria para la activación de la verificación de parámetros.
Da prioridad a las funciones escritas localmente. La verificación de parámetros no se lleva a cabo cuando está configuración está en vigor.
Nota: Cuando USERFNS está establecido en LOCAL, las funciones DT sólo muestran una fecha de seis dígitos.
Emita el siguiente comando en FOCPARM, FOCPROF, la línea de comandos, un FOCEXEC o en un comando ON TABLE. Tenga en cuenta que la configuración USERFNS=SYSTEM siempre debe estar en vigor.
SET USERFCHK = setting
donde:
Puede ser uno de los siguientes:
ON es el valor predeterminado. Verifica los parámetros de las solicitudes, pero no los de las funciones utilizadas en DEFINEs de archivos máster. Si la longitud del parámetro es incorrecta, se intenta solucionar el problema. Si el problema no puede corregirse, se genera un mensaje de error y se termina la evaluación de la expresión afectada.
Puesto que los parámetros no se verifican según las funciones especificadas en un archivo máster, no se informa de los errores surgidos en esas funciones hasta que el campo DEFINE se utilice en una solicitud posterior (si existe un problema), al generarse el mensaje de error:
(FOC003) THE FIELDNAME IS NOT RECOGNIZED
OFF no verifica los parámetros excepto en estos casos:
Nota: La configuración OFF entrará en desuso en una edición futura.
FULL equivale a ON, aunque también verifica los parámetros según las funciones empleadas en los DEFINE de los archivos máster.
ALERT verifica los parámetros de una solicitud, sin detener la ejecución cuando se detecta un problema. No verifica los parámetros en relación a las funciones usadas en los DEFINE de los archivos máster. Si la longitud de un parámetro es incorrecta y se intenta solucionar el problema en un segundo plano, el problema queda corregido y no se emite un mensaje. Si no se puede solventar el problema, se genera un mensaje de advertencia. La ejecución continúa como si la configuración estuviese en OFF, aunque puede que los resultados sean incorrectos.
Nota: Si se un introduce un parámetro de tipo incorrecto, fallará la verificación y se terminará el proceso.
La siguiente solicitud usa SUBSTR para extraer la subcadena que empieza en la posición 6 del campo TITLE y termina en la 14. El quinto argumento especifica una longitud (500) de subcadena demasiado larga (no debería ser superior a 9):
SET USERFCHK = ON TABLE FILE MOVIES PRINT TITLE COMPUTE NEWTITLE/A9 = SUBSTR(39, TITLE, 6 ,14, 500, NEWTITLE); WHERE CATEGORY EQ 'CHILDREN' END
Cuando la solicitud se ejecuta con USERFCHK=ON u OFF, se corrige la longitud incorrecta y la solicitud continúa procesándose:
TITLE NEWTITLE ----- -------- SMURFS, THE S, THE SHAGGY DOG, THE Y DOG, TH SCOOBY-DOO-A DOG IN THE RUFF Y-DOO-A D ALICE IN WONDERLAND IN WONDE SESAME STREET-BEDTIME STORIES AND SONGS E STREET- ROMPER ROOM-ASK MISS MOLLY R ROOM-AS SLEEPING BEAUTY ING BEAUT BAMBI
La siguiente solicitud tiene un tipo de datos incorrecto en el último argumento de SUBSTR. Este parámetro debería especificar un campo o un formato alfanumérico para la subcadena extraída:
SET USERFCHK = ON TABLE FILE MOVIES PRINT TITLE COMPUTE NEWTITLE/F9 = SUBSTR(39, TITLE, 6 ,14, 500, 'F9'); WHERE CATEGORY EQ 'CHILDREN' END
ERROR AT OR NEAR LINE 5 IN PROCEDURE USERFC3 FOCEXEC (FOC279) NUMERIC ARGUMENTS IN PLACE WHERE ALPHA ARE CALLED FOR (FOC009) INCOMPLETE REQUEST STATEMENT UNKNOWN FOCUS COMMAND WHERE BYPASSING TO END OF COMMAND
DIRECTOR TITLE NEWTITLE -------- ----- -------- SMURFS, THE ********* BARTON C. SHAGGY DOG, THE ********* SCOOBY-DOO-A DOG IN THE RUFF ********* GEROMINI ALICE IN WONDERLAND 1 SESAME STREET-BEDTIME STORIES AND SONGS -265774 ROMPER ROOM-ASK MISS MOLLY ********* DISNEY W. SLEEPING BEAUTY ********* DISNEY W. BAMBI 0
Information Builders |