# Exists - função de script

Exists() determina se um valor de campo específico já foi carregado no campo no script de carregamento. A função retorna TRUE ou FALSE, de forma que ela possa ser usada na cláusula wherede um comando LOAD ou de uma função IF.

Nota informativaVocê também pode usar ￼Not Exists()￼ para determinar se um valor de campo não foi carregado, mas convém ter cautela se você usar ￼Not Exists()￼ em uma cláusula Where. A função ￼Exists()￼ testa tabelas carregadas anteriormente e valores carregados anteriormente na tabela atual. Portanto, apenas a primeira ocorrência será carregada. Quando a segunda ocorrência for encontrada, o valor já estará carregado. Veja os exemplos para obter mais informações.

Sintaxe:

Exists(field\_name [, expr] )

**Tipo de dados de retorno:** Booleano

Argumentos:

Argumentos Exists

| Argumento | Descrição |
| --- | --- |
| field\_name | O nome do campo em que você deseja procurar um valor. É possível usar um nome de campo explícito sem aspas.<br><br>O campo já deve estar carregado pelo script. Isso significa que você não pode fazer referência a um campo carregado em uma cláusula mais abaixo no script. |
| expr | O valor que você deseja verificar, se ele existir. É possível usar um valor explícito ou uma expressão que faça referência a um ou vários campos na instrução de load atual.<br><br>Nota informativaNão é possível fazer referência a campos que não estejam incluídos na instrução de load atual.<br><br>Esse argumento é opcional. Se você o omitir, a função verificará se o valor de field\_name￼￼￼ no registro atual já existe. |

Exemplo 1:

`Exists 
 (Employee)`

Retorna -1 (True) se o valor do campo Employee no registro atual já existir em qualquer registro lido anteriormente que contenha esse campo.

Exemplo 2:

`Exists(Employee, 
 'Bill')`

Retorna -1 (True) se o valor de campo 'Bill' for encontrado no conteúdo atual do campo Employee.

Os comandos `Exists (Employee, Employee)` e `Exists (Employee)` são equivalentes.

Exemplo 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;
```

Isso resulta em uma tabela chamada Citizens no modelo de dados, que pode ser visualizado como um gráfico de tabela usando as dimensões Employee e Address.

A cláusula where: `where Exists (Employee)`, significa que apenas os nomes da tabelaCitizens que também estão em Employees são carregados na nova tabela. O comando Drop remove a tabela temporária Employees para evitar confusão.

Resultados do exemplo 3

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

Exemplo 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;
```

A cláusula where inclui not: `where not Exists (Employee)`.

Isso significa que apenas os nomes da tabela Citizens que não estiverem em Employees serão carregados na nova tabela.

Observe que existem dois valores para Lucy￼￼￼ na tabela Citizens, mas apenas um é incluído na tabela de resultados. Quando você carregar a primeira linha com o valor Lucy, o valor será incluído no campo Employee. Portanto, quando a segunda linha for verificada, o valor já existirá.

Resultados do exemplo 4

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

Exemplo 5:

Este exemplo mostra como carregar todos os valores.

```
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;
```

Para poder obter todos os valores para Lucy, duas coisas foram alteradas:

* Foi inserido um carregamento anterior na tabela Employees em que Employee foi renomeado para Name.

  Load Employee As Name;

* A condição Where em Citizens foi alterada para:

  not Exists (Name, Employee).

Isso cria campos para Name e Employee. Quando a segunda linha com Lucy for verificada, isso ainda não existirá em Name.

Resultados do exemplo 5

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

Dados usados no exemplo:

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 '|');