Cómo Eliminar un Procedimiento o una Función de una Base de Datos
Debe considerar muchos matices durante el desarrollo de herramientas que interactúan con varios DBMS, porque las mismas cosas podrían implementarse de diferentes maneras y un estándar SQL podría soportarse de diversas formas.
Cuando se consideran suficientes DBMS, resulta que no hay un método universal para eliminar una función o un procedimiento.
Solo se consideran DBMS relacionales en el artículo.
PostgreSQL
Es posible crear 2 tipos de funciones en PostgreSQL: normales y agregadas. Los procedimientos pueden crearse desde la versión 11 lanzada a finales de 2018. Las funciones, incluidas las funciones agregadas, están disponibles en versiones anteriores.
Mediante una declaración DROP ROUTINE, es posible eliminar cualquier función o procedimiento. La sintaxis de la consulta:
DROP ROUTINE function_or_procedure_name(argument_types)
donde:
- argument_types – tipos de argumentos separados por comas.
Por ejemplo:
DROP ROUTINE my_function(INTEGER, INTEGER)
Podría haber funciones y procedimientos con el mismo nombre pero con diferentes argumentos. Crear una función con el mismo nombre se llama sobrecarga de funciones. Para eliminar ambigüedades al eliminar procedimientos o funciones, es necesario especificar los argumentos. Si la función o el procedimiento no están sobrecargados, entonces no es necesario especificar los tipos de argumentos al eliminarlos:
DROP ROUTINE function_or_procedure_name
Existen declaraciones separadas para eliminar funciones agregadas, funciones normales y procedimientos, respectivamente:
- DROP AGGREGATE
- DROP FUNCTION
- DROP PROCEDURE
La sintaxis de estas declaraciones es la misma que la de DROP ROUTINE.
Las declaraciones de DROP ROUTINE y DROP PROCEDURE y los procedimientos fueron introducidos en la versión 11. Las declaraciones de DROP AGGREGATE y DROP FUNCTION se utilizan para eliminar funciones en versiones anteriores.
ORACLE
La siguiente declaración se utiliza para eliminar procedimientos en Oracle:
DROP PROCEDURE procedure_name
La declaración similar a la anterior se utiliza para eliminar funciones:
DROP FUNCTION function_name
Por ejemplo:
DROP PROCEDURE my_procedure;
Las funciones y los procedimientos pueden ser independientes o pueden crearse en una colección utilizando un paquete. Eliminar funciones y procedimientos del paquete solo es posible a través de eliminar o redefinir el paquete.
Las funciones y los procedimientos independientes no pueden sobrecargarse, por lo que no es necesario especificar tipos de argumentos al eliminarlos.
MySQL y MariaDB
La siguiente declaración se utiliza para eliminar procedimientos en MySQL y MariaDB:
DROP PROCEDURE procedure_name
La declaración similar a la anterior se utiliza para eliminar funciones:
DROP FUNCTION function_name
MySQL y MariaDB no soportan la sobrecarga de procedimientos o funciones; por lo tanto, solo se especifica un nombre.
Desde la versión 10.3.3 (23 de diciembre de 2017) es posible crear funciones agregadas en MariaDB. Las funciones agregadas se eliminan como las normales utilizando la declaración DROP FUNCTION.
SQLite
SQLite no soporta la creación de procedimientos y funciones, por lo que no existe una declaración para eliminarlos.
MS SQL Server
Las siguientes declaraciones se utilizan para eliminar procedimientos, funciones normales y funciones agregadas en MS SQL:
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
DROP AGGREGATE aggregate_function_name
MS SQL no soporta la sobrecarga de procedimientos ni de funciones; por lo que, al eliminarlos, solo se especifica el nombre.
A diferencia de los procedimientos y las funciones normales, las funciones agregadas en MS SQL solo se refieren a una implementación externa.
Netezza
Las siguientes declaraciones se utilizan para eliminar procedimientos, funciones normales y funciones agregadas en Netezza:
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name(argument_types)
donde:
- argument_types – tipos de argumentos separados por comas.
Netezza soporta la sobrecarga de funciones y procedimientos; por lo tanto, los tipos de argumentos son necesarios. A diferencia de los procedimientos, las funciones en Netezza solo se refieren a una implementación externa.
Informix
Las siguientes declaraciones se utilizan para eliminar procedimientos, funciones normales y funciones agregadas en Informix:
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name
donde:
- argument_types – tipos de argumentos separados por comas.
No es necesario especificar tipos de argumentos para funciones agregadas.
Es posible sobrecargar procedimientos; por lo tanto, algunos procedimientos pueden tener el mismo nombre. Para distinguirlos es posible dar a un procedimiento un nombre único al crearlo. Eso es cierto para las funciones normales, también. Se puede usar un nombre único para eliminar procedimientos y funciones normales en las siguientes declaraciones:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_normal_function_name
Si un procedimiento o una función normal no tienen sobrecarga, entonces no es necesario especificar tipos de argumentos al eliminarlo.
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
La siguiente declaración permite eliminar un procedimiento o una función normal:
DROP ROUTINE name(argument_types)
o en caso de que no haya sobrecargas:
DROP ROUTINE name
Esta declaración es útil cuando no se sabe qué necesita eliminarse, si un procedimiento o una función.
Además, se puede usar un nombre único para la eliminación:
DROP SPECIFIC ROUTINE unique_name
IBM Db2
Las siguientes declaraciones se utilizan para eliminar procedimientos y funciones en IBM Db2:
DROP PROCEDURE procedure_name(argument_types)
DROP PROCEDURE function_name(argument_types)
donde:
- argument_types – tipos de argumentos separados por comas.
Los procedimientos pueden sobrecargarse; por lo tanto, algunos procedimientos pueden tener el mismo nombre. Para definirlos, es posible establecer un valor único al crear un procedimiento. Eso es cierto también para las funciones. Un nombre único se puede usar para eliminar procedimientos y funciones a través de las siguientes declaraciones:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_function_name
Si un procedimiento o una función no tienen sobrecargas, entonces no es necesario especificar tipos de argumentos al eliminarlos:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
AWS Athena
Athena no soporta la creación de procedimientos y funciones; por lo tanto, no es posible eliminarlos.
Teradata
Las siguientes declaraciones se utilizan para eliminar procedimientos y funciones en Teradata:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name(argument_types)
donde:
- argument_types – tipos de argumentos separados por comas.
Teradata permite la sobrecarga de una función (pero no de un procedimiento). En una declaración CREATE FUNCTION además de un nombre de función, es necesario especificar un nombre único de la función al sobrecargar. Usando un nombre único, es posible eliminar una función con la ayuda de la siguiente declaración:
DROP SPECIFIC FUNCTION unique_function_name
Si una función no tiene sobrecargas, es posible no especificar tipos de argumentos al eliminar:
DROP FUNCTION function_name
Teradata soporta macros que son similares a procedimientos. La siguiente declaración se utiliza para eliminar macros:
DROP MACRO macro_name
Vertica
Vertica permite crear nuevos procedimientos (declaración CREATE PROCEDURE), que se refieren a un archivo ejecutable externo. No se soportan procedimientos almacenados.
La siguiente declaración se utiliza para eliminar procedimientos:
DROP PROCEDURE procedure_name(argument_types)
donde:
- tipos de argumentos separados por comas.
Los procedimientos pueden sobrecargarse. Los tipos de argumentos son necesarios incluso si el procedimiento no tiene sobrecargas.
Vertica soporta muchos tipos de funciones:
- Funciones agregadas (CREATE AGGREGATE)
- Funciones analíticas (CREATE ANALITIC FUNCTION)
- Funciones de filtro de carga (CREATE FUNCTION)
- Funciones de análisis de carga (CREATE PARSER)
- Funciones de origen de carga (CREATE SOURCE)
- Funciones de transformación (CREATE TRANSFORM FUNCTION)
- Funciones escalares (CREATE FUNCTION)
- Funciones SQL (CREATE FUNCTION)
Hay declaraciones entre paréntesis que ayudan a crear funciones.
Todas las funciones excepto las funciones SQL tienen una implementación externa, es decir, se refieren a una biblioteca dinámica externa.
Las funciones SQL se almacenan en una base de datos pero solo pueden usar consultas simples.
Existe una declaración para eliminar funciones para cada tipo de función, excepto las analíticas.
DROP AGGREGATE FUNCTION name(argument_types)
DROP FILTER name()
DROP SOURCE name()
DROP PARSER name()
DROP TRANSFORM FUNCTION name(argument_types)
DROP FUNCTION name(argument_types)
donde:
- tipos de argumentos separados por comas.
Cualquier función puede ser eliminada por una declaración DROP FUNCTION, excepto las funciones agregadas y de transformación. Las funciones pueden sobrecargarse, por lo tanto, para eliminarlas es necesario especificar los tipos de argumentos. Se necesitan incluso si la función no tiene sobrecargas.
SAP HANA
Las siguientes declaraciones se utilizan para eliminar procedimientos y funciones en SAP HANA:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
No se soporta la sobrecarga de funciones y procedimientos; por lo tanto, se especifica solo un nombre al eliminarlos.
Apache Impala
Impala permite crear una función (escalar y agregada) con una implementación externa. Las funciones escalares pueden implementarse en C++ y Java. Las funciones agregadas solo en C++. La siguiente declaración se utiliza para eliminar funciones agregadas:
DROP AGGREGATE FUNCTION function_name(argument_types)
donde:
- tipos de argumentos separados por comas.
La declaración para eliminar una función escalar depende del lenguaje de implementación.
La siguiente declaración se utiliza para eliminar una función escalar en C++:
DROP FUNCTION scalar_function_name(argument_types)
La siguiente declaración se utiliza para eliminar una función escalar en Java:
DROP FUNCTION scalar_function_name
Impala permite la sobrecarga de funciones; por lo tanto, es necesario especificar los tipos de argumentos al eliminar. Las funciones en Java son sobrecargadas por Java mismo, por esta razón, no se necesita especificar los argumentos.
HPL/SQL proporciona mayores oportunidades para usar procedimientos y funciones.
Apache Hive
Hive permite crear funciones con una implementación externa en Java. Las funciones pueden ser temporales o permanentes. Las funciones temporales existen solo en la sesión actual.
La siguiente declaración se utiliza para eliminar funciones permanentes:
DROP FUNCTION function_name
La siguiente declaración se utiliza para eliminar funciones temporales:
DROP TEMPORARY FUNCTION function_name
Hive permite crear macros temporales que pueden contener expresiones simples. La siguiente declaración se utiliza para eliminar macros:
DROP TEMPORARY MACRO macro_name
HPL/SQL proporciona mayores oportunidades para usar procedimientos y funciones.
Diferente documentación de DBMS: