Fournir un argument dans une fonction

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.


Haut de page

x
Types d'arguments

Les arguments valables pour une fonction sont :


Haut de page

x
Formats des arguments

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 :


Haut de page

x
Longueur des arguments

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.


Haut de page

x
Nombre et ordre des arguments

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.


Haut de page

x
Vérifier les paramètres de 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 :



x
Syntaxe : Activer la vérification de paramètre

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ù :

SYSTEM

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.

LOCALE

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.



x
Syntaxe : Contrôler la vérification de paramètre de fonction

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ù :

paramètre

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 :

  • Si un paramètre qui est trop long réécrit dans la zone de mémoire qui stocke le code du traitement machine, la taille est réduite automatiquement sans création d'un message.
  • Si un paramètre alphanumérique est trop court, il est rempli avec des espaces vides à la longueur correcte.

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 :

  • Si le paramètre a fourni un type incorrect, la vérification échoue et le traitement est arrêté.
  • Des erreurs sont survenues lors du traitement de routine, sauf si irrécupérables au niveau du système, elles sont transmises à la routine d'appel par le renvoi d'un paramètre de retour inchangé, ce qui est le dernier paramètre dans l'appel de sous-routine. Ceci est toujours transmis comme des espaces de sorties alphanumériques.


Exemple : Vérifier les paramètres avec erreurs corrigibles

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


Exemple : Vérifier les paramètres avec erreurs non corrigibles

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

Information Builders