Dans cette section : |
Lors de la fourniture d'un argument dans une fonction, vous devez comprendre quels types d'arguments sont acceptables, les formats et longueurs des arguments et le nombre et l'ordre de ceux-ci.
Les arguments valables pour une fonction sont :
CURR_SAL * 1.03
et
FN || LN
Selon la fonction, un argument peut être dans un format alphanumérique, numérique, ou de date. Si vous fournissez un argument dans un format incorrect, cela peut provoquer une erreur ou le renvoi de données incorrectes. Les types de formats des arguments sont :
Tous les arguments numériques sont convertis en format virgule flottante en double précision lorsqu'on les utilise avec une fonction ; cependant, les résultats sont renvoyés au format spécifié pour le champ de sortie.
Remarque : avec CDN ON, les avions numériques peuvent être délimités par une virgule suivie d'un espace.
Si vous fournissez un argument avec une année à deux chiffres, la fonction attribue un siècle selon les définitions des paramètres DATEFNS, YRTHRESH et DEFCENT.
Un argument est transmis à la fonction par référence, en d'autres termes c'est l'emplacement de la mémoire de l'argument qui est transmis. Aucune indication sur la longueur de l'argument n'est fournie.
Vous devez fournir la longueur de l'argument pour les chaînes alphanumériques. Certaines fonctions nécessitent une longueur pour les arguments d'entrée de sortie (par exemple, SUBSTR), alors que d'autres utilisent une seule longueur pour les deux arguments (par exemple, UPCASE).
Assurez-vous bien que toutes les longueurs sont correctes. Fournir une longueur incorrecte peut provoquer des résultats incorrects :
Certaines routines du système d'exploitation sont plus sensibles que d'autres au serveur de spécification des longueurs et lisent ces dernières dans des zones mémoire formatées incorrectement.
Le nombre d'arguments requis varie en fonction de chaque fonction. Les fonctions fournies par Information Builders peuvent nécessiter jusqu'à six arguments. Les sous routine écrites par utilisateur peuvent acquérir jusqu'à un maximum de 200 arguments, ce qui inclut l'argument de sortie. Si une fonction requiert plus de 200 arguments, vous aurez à utiliser au moins deux appels pour passer correctement les arguments la fonction.
Les arguments doivent être spécifiés dans l'ordre montré dans la syntaxe de chaque fonction. L'ordre requis varie en fonction de la fonction.
Comment : |
Le paramètre USERFCHK contrôle le niveau de vérification appliqué à DEFINE FUNCTION et aux arguments des fonctions fournies par Information Builders. Il n'affecte pas de vérification du nombre de paramètres ; le nombre correct doit toujours être fourni.
USERFCHK n'est pas pris en charge dans Maintain.
Typiquement, les fonctions attendent des paramètres d'un type spécifique ou ayant une longueur qui dépendent de la valeur d'un autre paramètre. Dans certaines situations, il est possible de forcer ces règles en tronquant la longueur de paramètres, en évitant ainsi de générer une erreur à l'exécution.
Le niveau de vérification et une conversion éventuelle dans un format valide vont dépendre des spécificités de la fonction. Les deux situations suivantes peuvent généralement être converties avec succès :
La vérification de paramètres ne peut être activée pour les fonctions de type DEFINE FUNCTIONs et celles fournies par Information Builders. Si votre site possède une fonction écrite localement ayant le même nom qu'une fonction fournie par Information Builders, le paramètre USERFNS va définir quelle fonction sera utilisée.
SET USERFNS= {SYSTEM|LOCAL}
où :
Donne la priorité aux fonctions fournies par Information Builders. SYSTEM est la valeur par défaut. Ce paramètre est obligatoire pour pouvoir activer la vérification de paramètre.
Donne la priorité aux fonctions écrites localement. La vérification de paramètre n'est pas effectuée ce paramètre est effectif.
Remarque : lorsque USERFNS est défini à LOCAL, les fonctions DT affichent seulement une date à six chiffres.
Exécutez la commande suivante dans FOCPARM, FOCPROF, sur la ligne de commande, dans un FOCEXEC, ou dans une commande ON TABLE. Notez que le paramètre USERFNS=SYSTEM doit être effectif.
SET USERFCHK = setting
où :
Peut être l'une des valeurs suivantes :
ON est la valeur par défaut. Vérifier les paramètres dans des requêtes, mais ne vérifie pas les paramètres pour les fonctions utilisées dans le fichier maître DEFINEs. Si un paramètre a une longueur incorrecte, une tentative de résolution du problème est effectuée. Si un tel problème ne peut pas être réseau, un message d'erreur est généré et l'évaluation de l'expression affectée est arrêtée.
Les paramètres n'étant pas vérifiés pour les fonctions spécifiées dans un fichier maître, aucune erreur n'est rapportée pour cette fonction tant que le champ DEFINE n'est pas utilisé dans une requête suivante pour laquelle, si un problème survient, le message suivant est généré :
(FOC003) THE FIELDNAME IS NOT RECOGNIZED
OFF ne vérifie pas les paramètres à l'exception des cas suivants :
Remarque : le paramètre OFF sera éliminé dans une future version.
FULL est comparable à ON, mais il vérifie aussi les paramètres pour fonctions utilisés dans le fichier maître DEFINEs.
ALERT vérifie les paramètres dans une requête sans altérer l'exécution quand un problème détecté. Il ne vérifie pas les paramètres pour des fonctions utilisées dans le fichier maître DEFINEs. Si un paramètre a une longueur incorrecte et qu'une tentative de résolution du problème est effectuée en arrière-plan, le problème est résolu son message. Si un tel problème ne peut pas être résolu, un message d'avertissement est généré. L'exécution continue comme si le paramètre était OFF, mais il se peut que les résultats soient incorrects.
Remarque :
La requête suivante utilise SUBSTR pour extraire la sous-chaîne qui commence à la position 6 et qui finit à la position 14 d'un champ TITLE. Le cinquième argument spécifie une longueur de chaîne (500) qui est trop longue (elle devrait pas être plus long que 9) :
SET USERFCHK = ON TABLE FILE MOVIES PRINT TITLE COMPUTE NEWTITLE/A9 = SUBSTR(39, TITLE, 6 ,14, 500, NEWTITLE); WHERE CATEGORY EQ 'CHILDREN' END
La requête est exécutée avec USERFCHK=ON ou OFF, la longueur correcte et corrige et la requête continue le traitement :
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 requête suivante contient un type de données incorrectes dans le dernier argument de SUBSTR. Ce paramètre devrait spécifier un champ ou un format alphanumérique pour la sous- chaîne extraite :
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 |