Sentencia CALL

La sentencia CALL llama (invoca) a una rutina.

SINTAXIS

Utilización de la sentencia CALL

La sentencia CALL invoca a una rutina. Una rutina es una función o procedimiento definido por el usuario que se ha definido mediante:
  • Una sentencia CREATE FUNCTION
  • Una sentencia CREATE PROCEDURE
Nota: Además de las funciones y procedimientos estándar definidos por el usuario, también puede utilizar CALL para invocar funciones incorporadas (proporcionadas por el intermediario) y funciones SQL definidas por el usuario. Sin embargo, la forma normal de invocar estos tipos de función es, simplemente, incluir sus nombres en expresiones.

La rutina llamada debe invocarse de forma que coincida con su definición. Por ejemplo, si se ha definido una rutina con tres parámetros, los dos primeros de tipo entero y el tercero de tipo carácter, la sentencia CALL debe pasar tres variables a la rutina, cada una del tipo de datos que se indique en la definición. Esto se denomina coincidencia exacta de signatura, que significa que la signatura proporcionada por la sentencia CALL debe coincidir con la proporcionada por la definición de la rutina.

La coincidencia exacta de signatura también se aplica al valor de retorno de una rutina. Si la cláusula RETURNS se especifica en la sentencia CREATE FUNCTION, o la rutina es una función incorporada, la cláusula INTO debe especificarse en la sentencia CALL. No se puede ignorar el valor de retorno de una rutina. Asimismo, si la cláusula RETURNS no se especifica en la sentencia CREATE FUNCTION, no debe especificarse la cláusula INTO, porque no hay valor de retorno de la rutina.

Puede utilizar la sentencia CALL para invocar una rutina que se ha implementado de alguna de estas maneras:
  • ESQL.
  • Java.
  • Como un procedimiento almacenado en una base de datos.
  • Como una función incorporada (proporcionada por el intermediario). (Pero vea la nota anterior sobre las llamadas a funciones incorporadas.)

Esta variedad de implementación significa que algunas de las cláusulas del diagrama de sintaxis de CALL no son aplicables (o no están permiten) para todos los tipos de rutina. También permite a la sentencia CALL invocar cualquier tipo de rutina, independientemente de cómo se haya definido la rutina.

Cuando el parámetro opcional NombreEsquemaIntermediario no se especifica, el analizador SQL del intermediario busca el procedimiento con nombre utilizando el algoritmo descrito en la sentencia PATH (consulte la Cláusula PATH de la sentencia BROKER SCHEMA.

Cuando se especifica el parámetro NombreEsquemaIntermediario, el analizador SQL del intermediario invoca el procedimiento con nombre en el esquema especificado sin buscar primero en la vía de acceso. Sin embargo, si una referencia de procedimiento es ambigua (es decir, hay dos procedimientos con el mismo nombre en distintos esquemas de intermediario) y la referencia no está calificada por el NombreEsquemaIntermediario opcional, el conjunto de herramientas Eclipse genera un "error de vista de Tareas" que debe corregir para desplegar el código ambiguo.

Las funciones incorporadas proporcionadas por el intermediario se colocan automáticamente en un esquema de intermediario predefinido denominado SQL. El esquema SQL siempre es el último elemento donde se busca una rutina que no coincide con una rutina definida por el usuario. Por tanto, un módulo definido por el usuario tiene prioridad frente a una rutina incorporada del mismo nombre.

Cada esquema de intermediario proporciona un símbolo o espacio de nombres exclusivo para una rutina, por lo que un nombre de rutina es exclusivo cuando está calificado por el nombre del esquema al que pertenece.

La cláusula INTO se utiliza para almacenar el valor de retorno de una rutina que se ha definido con una cláusula RETURNS, o desde una función incorporada. El destino puede ser una variable ESQL de un tipo de datos que coincida con el tipo de datos de la cláusula RETURNS o una referencia de mensaje separada por puntos. Por ejemplo, las dos sentencias ESQL siguientes son válidas:
        CALL myProc1() INTO cursor;
        CALL myProc1() INTO OutputRoot.XML.TestValue1; 

La sentencia CALL pasa los parámetros al procedimiento en el orden en que se le han proporcionado. Los parámetros que se han definido como IN o INOUT en la definición de la rutina, se evalúan antes de ejecutar CALL pero los parámetros definidos como OUT se pasan siempre como parámetros NULL del tipo correcto. Cuando se ha completado el procedimiento, cualquier parámetro declarado como OUT o INOUT se actualiza para reflejar cualquier cambio realizado en los mismos durante la ejecución del procedimiento. Los parámetros definidos como IN no cambian nunca durante la ejecución de un procedimiento.

La sobrecarga de rutinas no está soportada. Esto significa que no puede crear dos rutinas del mismo nombre en el mismo esquema de intermediario. Si el intermediario detecta que se ha sobrecargado una rutina, genera una excepción. De igual manera, no puede invocar un procedimiento almacenado de base de datos que se ha sobrecargado. Un procedimiento almacenado de base de datos está sobrecargado cuando existe otro procedimiento con el mismo nombre en el mismo esquema de base de datos. Sin embargo, puede invocar un método Java sobrecargado, siempre y cuando cree una definición ESQL aparte para cada método sobrecargado al que desee llamar, y asigne a cada definición ESQL un nombre de rutina exclusivo.

Conceptos relacionados
Visión general de ESQL
Tareas relacionadas
Desarrollo de ESQL
Invocar procedimientos almacenados
Referencia relacionada
Diagramas de sintaxis: tipos disponibles
Sentencias ESQL
Sentencia CREATE PROCEDURE
Sentencia BROKER SCHEMA
Cláusula PATH
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak04920_