DROP PROCEDURE

DROP PROCEDURE — elimina un procedimiento

Synopsis

DROP PROCEDURE [ IF EXISTS ] nombre [ ( [ [ modo_arg ] [ nombre_arg ] tipo_arg [, ...] ] ) ] [, ...]
    [ CASCADE | RESTRICT ]

Descripción

DROP PROCEDURE elimina la definición de uno o más procedimientos existentes. Para ejecutar este comando, el usuario debe ser el propietario de los procedimientos. Por lo general, se deben especificar los tipos de argumentos de los procedimientos, ya que pueden existir varios procedimientos diferentes con el mismo nombre y diferentes listas de argumentos.

Parámetros

IF EXISTS

No arroja un error si el procedimiento no existe. Se emite una advertencia (notice) en este caso.

nombre

El nombre (opcionalmente calificado por esquema) de un procedimiento existente.

modo_arg

El modo de un argumento: IN, OUT, INOUT o VARIADIC. Si se omite, el valor predeterminado es IN (pero consulta más abajo).

nombre_arg

El nombre de un argumento. Ten en cuenta que DROP PROCEDURE en realidad no presta atención a los nombres de los argumentos, ya que solo se utilizan los tipos de datos de los argumentos para determinar la identidad del procedimiento.

tipo_arg

El tipo o tipos de datos de los argumentos del procedimiento (opcionalmente calificados por esquema), si los hubiera. Consulta más abajo para ver los detalles.

CASCADE

Elimina automáticamente los objetos que dependen del procedimiento, y a su vez todos los objetos que dependen de esos objetos (consulta la Section 5.15).

RESTRICT

Rechaza eliminar el procedimiento si hay objetos que dependen de él. Este es el comportamiento predeterminado.

Notas

Si solo existe un procedimiento con el nombre dado, se puede omitir la lista de argumentos. En este caso, también se omiten los paréntesis.

En PostgreSQL, basta con listar los argumentos de entrada (incluyendo INOUT), ya que no se permite que dos rutinas con el mismo nombre compartan la misma lista de argumentos de entrada. Además, el comando DROP no comprobará realmente que hayas escrito correctamente los tipos de los argumentos OUT; por lo tanto, cualquier argumento que esté marcado explícitamente como OUT es solo ruido. Sin embargo, es recomendable escribirlos para mantener la coherencia con el comando CREATE correspondiente.

Para compatibilidad con el estándar SQL, también se permite escribir todos los tipos de datos de los argumentos (incluyendo los de los argumentos OUT) sin ningún marcador modo_arg. Cuando se hace esto, los tipos de los argumentos OUT del procedimiento se verificarán contra el comando. Esta disposición crea una ambigüedad, ya que cuando la lista de argumentos no contiene marcadores modo_arg, no está claro qué regla se pretende aplicar. El comando DROP intentará la búsqueda de ambas maneras y arrojará un error si encuentra dos procedimientos diferentes. Para evitar el riesgo de tal ambigüedad, se recomienda escribir explícitamente los marcadores IN en lugar de dejar que se asuma el valor predeterminado, forzando así el uso de la interpretación tradicional de PostgreSQL.

Las reglas de búsqueda explicadas anteriormente también las utilizan otros comandos que actúan sobre procedimientos existentes, como ALTER PROCEDURE y COMMENT ON PROCEDURE.

Ejemplos

Si solo existe un procedimiento do_db_maintenance, basta con este comando para eliminarlo:

DROP PROCEDURE do_db_maintenance;

Dada esta definición de procedimiento:

CREATE PROCEDURE do_db_maintenance(IN target_schema text, OUT results text) ...

cualquiera de estos comandos funcionaría para eliminarlo:

DROP PROCEDURE do_db_maintenance(IN target_schema text, OUT results text);
DROP PROCEDURE do_db_maintenance(IN text, OUT text);
DROP PROCEDURE do_db_maintenance(IN text);
DROP PROCEDURE do_db_maintenance(text);
DROP PROCEDURE do_db_maintenance(text, text);  -- potencialmente ambiguo

Sin embargo, el último ejemplo sería ambiguo si también existiera, por ejemplo:

CREATE PROCEDURE do_db_maintenance(IN target_schema text, IN options text) ...

Compatibilidad

Este comando cumple con el estándar SQL, con las siguientes extensiones de PostgreSQL:

  • El estándar solo permite eliminar un procedimiento por comando.

  • La opción IF EXISTS es una extensión.

  • La capacidad de especificar los modos y nombres de los argumentos es una extensión, y las reglas de búsqueda difieren cuando se especifican los modos.

Véase también

CREATE PROCEDURE, ALTER PROCEDURE, DROP FUNCTION, DROP ROUTINE