Utilizar la sentencia CALL para invocar una rutina escrita por el usuario

La sentencia CALL de ESQL invoca una rutina. Una rutina es una función o un procedimiento definido por el usuario que se ha definido mediante una de las sentencias siguientes:
  • Una sentencia CREATE FUNCTION
  • Una sentencia CREATE PROCEDURE
Nota: También puede utilizar CALL para invocar funciones incorporadas (proporcionadas por el intermediario) y funciones SQL definidas por el usuario, así como funciones y procedimientos estándares definidos por el usuario. Sin embargo, el modo usual de invocar estos tipos de función es simplemente utilizando los nombres en expresiones.
Puede utilizar la sentencia CALL para invocar una rutina que se ha implementado de cualquiera de los modos siguientes:
  • ESQL.
  • Java.
  • Como procedimiento almacenado en una base de datos.
  • Como función incorporada (proporcionada por el intermediario). (Pero consulte la nota anterior sobre cómo llamar a las funciones incorporadas.)

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 .

Llamada a una rutina EQSL

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.

Tiene que haber una coincidencia exacta de uno a uno, entre la definición y la llamada (CALL), de los tipos de datos y las direcciones de cada parámetro.

Una rutina ESQL está autorizada a devolver cualquier tipo de datos ESQL, excluyendo List y Row.

Llamada a una rutina Java

Una rutina se invoca como un método Java si la definición de la rutina especifica una cláusula LANGUAGE de JAVA.

Tiene que haber una coincidencia exacta de uno a uno, entre la definición y la llamada (CALL), de los tipos de datos y las direcciones de cada parámetro.

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.

Llamada a un procedimiento almacenado de base de datos

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:

  1. Si la sentencia CALL especifica una cláusula IN, el nombre del origen de datos y/o el esquema de base de datos se toma de la cláusula IN.
  2. Si el nombre del origen de datos no lo proporciona una cláusula IN en la sentencia CALL, se toma del atributo DATASOURCE del nodo.
  3. Si el esquema de base de datos no lo proporciona una cláusula IN en la sentencia CALL, pero se especifica en la cláusula EXTERNAL NAME de la sentencia CREATE PROCEDURE, se toma de la cláusula EXTERNAL NAME.
  4. Si no se especifica ningún esquema de base de datos en la cláusula EXTERNAL NAME de la sentencia CREATE PROCEDURE, se utiliza el nombre de usuario de la base de datos como nombre de esquema. Si se encuentra un procedimiento coincidente, se invoca la rutina.
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 la ejecución.
Nota: Igual que la cláusula IN de la sentencia CALL, 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. Su uso en aplicaciones nuevas está desfasado.

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.

Conceptos relacionados
Visión general de ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac06009_