La sentencia CALL de ESQL invoca rutinas que se han creado e implementado de distintas formas.
(Aunque puede utilizar CALL para invocar funciones incorporadas (proporcionadas por el intermediario) y funciones SQL , normalmente se utilizan directamente sus nombres en expresiones.)
Para obtener detalles de la sintaxis y parámetros de la sentencia CALL, consulte Sentencia CALL. Para obtener un ejemplo de la utilización de CALL, consulte los ejemplos en Sentencia CREATE PROCEDURE .
Una rutina se invoca como un método ESQL si la definición de la rutina especifica una cláusula LANGUAGE de ESQL o si la rutina es una función incorporada.
Ha de haber una correspondencia exacta de los tipos de datos y direcciones de cada parámetro, entre la definición y la llamada (CALL).
Una rutina ESQL está autorizada a devolver cualquier tipo de datos ESQL, excluyendo List y Row.
Una rutina se invoca como un método Java si la definición de la rutina especifica una cláusula LANGUAGE de JAVA.
Ha de haber una correspondencia exacta de los tipos de datos y direcciones de cada parámetro, entre la definición y la llamada (CALL).
Si el método Java tiene un tipo de retorno de nulo, la cláusula INTO no se puede utilizar porque no hay ningún valor a devolver.
Una rutina Java puede devolver cualquier tipo de datos de la Tabla de correlación de tipos de datos ESQL a Java. Tenga en cuenta que esto excluye List y Row.
Una rutina se invoca como procedimiento almacenado de base de datos si la definición de la rutina tiene una cláusula LANGUAGE de DATABASE.
Cuando se efectúa una llamada a un procedimiento almacenado de base de datos, el intermediario busca una definición (creada por una sentencia CREATE PROCEDURE) que coincida con el nombre local del procedimiento. A continuación, el intermediario utiliza la secuencia siguiente para resolver el nombre por el que se conoce el procedimiento en la base de datos y el esquema de base de datos al que pertenece:
La principal utilidad de la cláusula IN de la sentencia CALL es que permite elegir dinámicamente el origen de datos y/o el esquema de base de datos en tiempo de ejecución. La cláusula EXTERNAL SCHEMA también permite elegir dinámicamente el esquema de base de datos que contiene el procedimiento almacenado, pero no es tan flexible como la cláusula IN y sólo se conserva por compatibilidad con versiones anteriores. En las aplicaciones nuevas ya no se utiliza).
Si la rutina llamada tiene especificado DYNAMIC RESULT SETS en la definición, el número de expresiones de la ListaParámetros de la sentencia CALL debe coincidir con el número de parámetros reales en la rutina, más el número de DYNAMIC RESULT SETS. Por ejemplo, si la rutina tiene tres parámetros y dos DYNAMIC RESULT SETS, la sentencia CALL debe pasar cinco parámetros a la rutina llamada. Los parámetros pasados para los dos DYNAMIC RESULT SETS deben ser parámetros de lista; es decir, deben ser referencias de campo calificadas con corchetes de matriz [ ]; por ejemplo Environment.ResultSet1[].
Un procedimiento almacenado de base de datos está autorizado a devolver cualquier tipo de datos ESQL, excluyendo Interval, List y Row.