# Exists - Fonction de script

Exists() détermine si une valeur de champ donnée a déjà été chargée dans le champ du script de chargement. La fonction renvoie TRUE ou FALSE. Elle peut donc être utilisée dans la clause where d'une instruction LOAD ou d'une fonction IF.

Note InformationsVous pouvez également utiliser Not Exists() pour déterminer si une valeur de champ n'a pas été chargée, mais il est recommandé de faire attention si vous utilisez Not Exists() dans une clause where. La fonction Exists() teste à la fois les tables précédemment chargées et les valeurs précédemment chargées dans la table active. C'est pourquoi seule la première occurrence est chargée. Lors de la recontre de la deuxième occurrence, la valeur est déjà chargée. Pour plus d'informations, voir les exemples.

Syntaxe :

Exists(field\_name [, expr] )

**Type de données renvoyé :** booléen

Arguments :

Arguments Exists

| Argument | Description |
| --- | --- |
| field\_name | Nom du champ dans lequel vous souhaitez rechercher une valeur. Vous pouvez utiliser un nom de champ explicite sans guillemets.<br><br>Le champ doit déjà avoir été chargé par le script. Cela signifie que vous ne pouvez pas faire référence à un champ chargé dans une clause plus loin dans le script. |
| expr | Valeur dont vous souhaitez vérifier l'existence. Vous pouvez utiliser une valeur explicite ou une expression faisant référence à un ou plusieurs champs de l'instruction LOAD active.<br><br>Note InformationsVous ne pouvez pas faire référence à des champs non inclus dans l'instruction LOAD active.<br><br>Cet argument est facultatif. Si vous l'omettez, la fonction vérifiera si la valeur de field\_name de l'enregistrement actif existe déjà. |

Exemple 1:

`Exists 
 (Employee)`

Renvoie -1 (True) si la valeur du champ Employee figurant dans l'enregistrement actif existe déjà dans un enregistrement lu précédemment et contenant ce champ.

Exemple 2:

`Exists(Employee, 
 'Bill')`

Renvoie -1 (True) si la valeur de champ 'Bill' se trouve dans le contenu actif du champ Employee.

Les instructions `Exists (Employee, Employee)` et `Exists (Employee)` sont équivalentes.

Exemple 3:

```
Employees:
LOAD * inline [
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where Exists (Employee);

Drop Tables Employees;
```

Ce script génère dans le modèle de données une table intitulée Citizens, que vous pouvez afficher comme graphique de type table à l'aide des dimensions Employee et Address

La clause where : `where Exists (Employee)` signifie que seuls les noms issus de la table Citizens figurant également dans Employees sont chargés dans la nouvelle table. Pour éviter toute confusion, l'instruction Drop supprime la table temporaire Employees.

Résultats de l'exemple 3

| Employee | Address |
| --- | --- |
| Bill | New York |
| John | Miami |
| Steve | Chicago |

Exemple 4:

```
Employees:
Load * inline [ 
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where not Exists (Employee);
 
Drop Tables Employees;
```

La clause comprend where comprend not : `where not Exists (Employee)`.

Cela signifie que seuls les noms issus de la table Citizensqui ne figurent pas dans Employees sont chargés dans la nouvelle table.

Notez qu'il existe deux valeurs pour Lucy dans la table Citizens, mais qu'une seule est incluse dans la table de résultats. Lorsque vous chargez la première ligne avec la valeur Lucy, la valeur est incluse dans le champ Employee. Ainsi, lors du contrôle de la deuxième ligne, la valeur existe déjà.

Résultats de l'exemple 4

| Employee | Address |
| --- | --- |
| Mary | London |
| Lucy | Madrid |

Exemple 5:

Cet exemple montre comment charger toutes les valeurs.

```
Employees:
Load Employee As Name;
LOAD * inline [
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where not Exists (Name, Employee);
 
Drop Tables Employees;
```

Pour pouvoir obtenir toutes les valeurs de Lucy, il a fallu modifier deux éléments :

* Un chargement précédent de la table Employees a été inséré, en remplaçant le nom Employee par Name.

  Load Employee As Name;

* La condition Where de Citizens a été remplacée par :

  not Exists (Name, Employee).

Cela crée des champs pour Name et pour Employee. Lors du contrôle de la deuxième ligne avec Lucy, elle n'existe toujours pas dans Name.

Résultats de l'exemple 5

| Employee | Address |
| --- | --- |
| Mary | London |
| Lucy | Madrid |
| Lucy | Paris |

Données utilisées dans l'exemple :

LOAD \* inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|'); Citizens: Load \* inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|');