Vai al contenuto principale

Exists - funzione di script

Exists() determina se un valore di campo specifico è già stato caricato nel campo nello script di caricamento dei dati. La funzione restituisce TRUE o FALSE, quindi può essere utilizzata nella clausola where di un'istruzione LOAD o un'istruzione IF.

Nota: È possibile utilizzare Not Exists() per determinare se un valore di campo non è stato caricato, ma occorre prestare attenzione se si usa Not Exists() in una clausola Where. La funzione Exists() verifica sia le tabelle caricate in precedenza che i valori caricati in precedenza nella tabella corrente. Verrà quindi caricata solo la prima occorrenza. Quando viene rilevata la seconda occorrenza, il valore sarà già caricato. Vedere gli esempi per ulteriori informazioni.

Syntax:  

Exists(field_name [, expr])

Return data type: Booleano

Arguments:  

Argomenti
Argomento Descrizione
field_name

Nome del campo in cui si desidera cercare un valore. È possibile utilizzare un nome di campo esplicito senza virgolette.

Il campo deve già essere caricato dallo script. Ciò significa che non è possibile fare riferimento a un campo caricato in una clausola che si trova più in basso nello script.

expr

Valore del quale si vuole verificare l'esistenza. È possibile utilizzare un valore esplicito o un'espressione che fa riferimento a uno o più campi nell'istruzione LOAD corrente.

Nota: Non è possibile fare riferimento a campi non inclusi nell'istruzione LOAD corrente.

Questo argomento è facoltativo. Se viene omesso, la funzione verificherà se il valore di field_name nel record corrente è già esistente.

Dati utilizzati nell'esempio:

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 '|');   Drop Tables Employees;

Example:  

Exists (Employee)

Restituisce -1 (True) se il valore di campo Employee nel record attuale esiste già in uno qualsiasi dei record letti in precedenza contenenti tale campo.

Le istruzioni Exists (Employee, Employee) e Exists (Employee) sono equivalenti.

Example:  

Exists(Employee, 'Bill')

Restituisce -1 (True) se il valore di campo 'Bill' viene trovato nel contenuto attuale del campo Employee.

Example:  

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;

 

Viene generata una tabella che può essere usata in una visualizzazione di tabella con le dimensioni Employee e Address.

La clausola where: where Exists (Employee) significa che nella nuova tabella vengono caricati solo i nomi della tabella Citizens che sono presenti anche in Employees. L'istruzione Drop rimuove la tabella Employees per evitare confusione.

Risultati
   
Employee Address
Bill New York
John Miami
Steve Chicago

Example:  

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|Miami22222222223
+0 ] (delimiter is '|') where not Exists (Employee);   Drop Tables Employees;

 

La clausola where include not: where not Exists (Employee, Name).

Ciò significa che nella nuova tabella vengono caricati solo i nomi della tabella Citizens che non sono presenti in Employees.

Si noti che sono presenti due valori per Lucy nella tabella Citizens, ma solo uno è incluso nella tabella risultante. Quando si carica la prima riga, il valore viene incluso nella tabella di simboli Employee. Quindi, quando viene controllata la seconda riga, il valore è già esistente.

L'esempio successivo mostra come caricare tutti i valori.

Risultati
Employee Indirizzo
Mary London
Lucy Madrid

Example:  

Employees: Load Employee As Name, ID, Salary; 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;

 

Per ottenere tutti i valori per Lucy è necessario effettuare due modifiche:

  • Aggiungere un'istruzione preceding LOAD a Employees in cui Employee viene rinominato in Name.

    Load Employee As Name, ID, Salary;

  • Modificare la condizione Where in Citizens in:

    not Exists (Name, Employee).

Verranno così create tabelle di simboli diverse per Name e Employee. Quando viene controllata la seconda riga per Lucy, il valore è ancora inesistente in Name.

Risultati
Employee Indirizzo
Mary London
Lucy Madrid
Lucy Paris