Utilizzo dell'istruzione CALL per richiamare una routine scritta dall'utente

L'istruzione ESQL CALL richiama una routine. Una routine è una funzione o una procedura definita dall'utente che è stata definita da una delle seguenti istruzioni:
  • Un'istruzione CREATE FUNCTION
  • Un'istruzione CREATE PROCEDURE
Nota: come per le funzioni e procedure definite dall'utente standard, si può utilizzare CALL anche per richiamare le funzioni integrate (fornite dal broker) e le funzioni SQL definite dall'utente. Tuttavia, la modalità comune per richiamare questi tipi di funzione è semplicemente quella di utilizzare i relativi nomi all'interno di espressioni.
E' possibile utilizzare l'istruzione CALL per richiamare una routine che è stata implementata in uno qualsiasi dei seguenti modi:
  • ESQL.
  • Java.
  • Come procedura memorizzata in un database.
  • Come funzione integrata (fornita dal broker). Consultare la nota sopra riportata relativa al richiamo delle funzioni integrate.

Per i dettagli sulla sintassi e i parametri dell'istruzione CALL, consultare Istruzione CALL. Per avere un esempio dell'utilizzo di CALL, consultare gli esempi contenuti in Istruzione CREATE PROCEDURE.

Richiamo di una routine EQSL

Una routine è richiamata come metodo ESQL se la definizione della routine specifica una clausola LANGUAGE di ESQL o se la routine è una funzione integrata.

E' necessaria una corrispondenza esatta uno a uno, tra la definizione e l'istruzione CALL, dei tipi di dati e delle direzioni di ogni parametro.

Una routine ESQL può restituire qualsiasi tipo di dati ESQL, esclusi List e Row.

Richiamo di una routine Java

Una routine è richiamata come metodo Java se la definizione della routine specifica una clausola LANGUAGE di JAVA.

E' necessaria una corrispondenza esatta uno a uno, tra la definizione e l'istruzione CALL, dei tipi di dati e delle direzioni di ogni parametro.

Se il metodo Java ha un tipo di restituzione vuoto, la clausola INTO non può essere utilizzata perché non ha un valore da restituire.

Una routine Java può restituire qualsiasi tipo di dati nella Tabella di associazione del tipo di dati ESQL in Java. Si noti che questo esclude i tipi di dati List e Row.

Richiamo di una procedura memorizzata nel database

Una routine è richiamata come procedura memorizzata nel database se la definizione della routine ha una clausola LANGUAGE di DATABASE.

Quando viene effettuata una chiamata ad una procedura memorizzata nel database, il broker ricerca una definizione (creata da un'istruzione CREATE PROCEDURE) che corrisponda al nome locale della procedura. Il broker utilizza quindi la seguente sequenza per risolvere il nome con cui la procedura viene riconosciuta nel database e lo schema di database al quale appartiene:

  1. Se l'istruzione CALL specifica una clausola IN, il nome dell'origine dati, lo schema di database o entrambi, sono ricavati dalla clausola IN.
  2. Se il nome dell'origine dati non è fornito da una clausola IN nell'istruzione CALL, viene ricavato dall'attributo DATASOURCE del nodo.
  3. Se lo schema di database non è fornito da una clausola IN nell'istruzione CALL, ma è specificato nella clausola EXTERNAL NAME dell'istruzione CREATE PROCEDURE, viene ricavato dalla clausola EXTERNAL NAME.
  4. Se non è specificato alcuno schema di database nella clausola EXTERNAL NAME dell'istruzione CREATE PROCEDURE, il nome utente del database viene utilizzato come nome dello schema. Se si trova una procedura corrispondente, viene richiamata la routine.
L'utilizzo principale della clausola IN dell'istruzione CALL è quello di permettere che l'origine dati, lo schema di database o entrambi siano scelti dinamicamente durante il runtime.
Nota: così come la clausola IN dell'istruzione CALL, anche la clausola EXTERNAL consente che lo schema di database, che contiene la procedura memorizzata, sia scelto dinamicamente, ma non è così flessibile come la clausola IN ed è mantenuta solo per compatibilità con le versioni precedenti. Il suo utilizzo nelle nuove applicazioni è considerato obsoleto.

Se la routine richiamata contiene qualche DYNAMIC RESULT SETS specificata nella propria definizione, il numero di espressioni nel ParameterList dell'istruzione CALL deve corrispondere al numero di parametri effettivi nella routine, più il numero di DYNAMIC RESULT SETS. Ad esempio, se la routine ha tre parametri e due DYNAMIC RESULT SETS, l'istruzione CALL deve trasmettere cinque parametri alla routine richiamata. I parametri trasmessi per i due DYNAMIC RESULT SETS devono essere parametri di elenco; cioè, devono essere riferimenti di campo qualificati con parentesi di array [ ]; ad esempio, Environment.ResultSet1[].

Una procedura memorizzata nel database può restituire tutti i tipi di dati ESQL, esclusi Interval, List, e Row.

Concetti correlati
Panoramica di ESQL
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac06009_