Mandatos CALL y EXEC[UTE [PROCEDURE]

Utilice los comandos CALL, EXEC, EXECUTE o EXECUTE PROCEDURE para invocar un procedimiento almacenado en un host.

Los mandatos CALL, EXEC, EXECUTE, EXECUTE PROCEDURE son idénticos en comportamiento, entradas y salidas. Los diferentes mandatos proporcionan compatibilidad con otros métodos de invocación de lenguaje de procedimiento. También puede utilizar el mandato SELECT para invocar un procedimiento almacenado.

Sinopsis

CALL procedure_name(arguments)
EXEC procedure_name(arguments)
EXECUTE procedure_name(arguments)
EXECUTE PROCEDURE procedure_name(arguments)
SELECT procedure_name(arguments)

Entradas

Los mandatos CALL y EXEC[UTE [PROCEDURE] aceptan las entradas siguientes:
Tabla 1. Entradas de CALL y EXEC[UTE [PROCEDURE]]
Entrada Descripción
nombre_procedimiento Nombre del procedimiento almacenado que desea invocar. Si sólo especifica un nombre de procedimiento, el sistema busca en la base de datos y el esquema actuales y, a continuación, busca el procedimiento en PATH.

Puede especificar un nombre de objeto totalmente calificado para ejecutar un procedimiento definido en una base de datos o esquema diferentes.

argumentos Especifica una lista de argumentos de constante o literal para el procedimiento. Los argumentos pueden ser resultados de funciones cuando las funciones también toman sólo argumentos de constante o literal.

Resultados

Los mandatos CALL y EXEC[UTE [PROCEDURE] tienen las salidas siguientes:

Tabla 2. Salidas de CALL y EXEC[UTE [PROCEDURE]]
Resultado Descripción
ERROR: EXECUTE PROC: Permission denied (Permiso denegado). Este error indica que la cuenta del usuario actual no tiene el permiso Execute para el procedimiento almacenado.
ERROR: Function 'NAME(ARGS)' does not exist (la función no existe)

No se puede identificar una función que satisfaga los tipos de argumentos

Es posible que tenga que añadir conversiones de tipo explícitas.

Este mensaje indica que el usuario ha introducido argumentos incorrectos para el procedimiento almacenado. Existe un procedimiento con ese nombre, pero espera argumentos de entrada diferentes.

Descripción

Privilegios necesarios
Para invocar un procedimiento almacenado, debe cumplir uno de los criterios siguientes:
  • Debe tener el privilegio para ejecutar (Execute) en el objeto PROCEDURE.
  • Debe tener el privilegio para ejecutar (Execute) en el procedimiento específico.
  • Debe ser el propietario del procedimiento.
  • Debe ser el usuario administrador de base de datos o ser propietario de la base de datos actual o del esquema actual en sistemas que con soporte para varios esquemas.

Uso

En los ejemplos siguientes se proporcionan ejemplos de uso:
MYDB.MYSCH(USER)=> CALL updateacct();
MYDB.MYSCH(USER)=> EXEC schema_two.myproc();
MYDB.MYSCH(USER)=> EXECUTE sales.dev.inventorysearch(umbrellas);
MYDB.MYSCH(USER)=> EXECUTE PROCEDURE updateacct();
También puede utilizar el mandato SELECT para ejecutar un procedimiento; sin embargo, no puede especificar una cláusula FROM. Por ejemplo:
MYDB.MYSCH(USER)=> SELECT updateacct();
MYDB.MYSCH(USER)=> SELECT inventorysearch(umbrellas);