Eliminar un Procedimiento o una Función de una Base de Datos
Debe considerar muchos matices al desarrollar herramientas que interactúan con varios DBMS, porque las mismas cosas podrían implementarse de diferentes formas y un estándar SQL podría ser soportado de diferentes maneras.
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 se pueden crear desde la versión 11 lanzada a finales de 2018. Las funciones, incluidas las funciones agregadas, están disponibles en versiones anteriores.
Usando la instrucción DROP ROUTINE, es posible eliminar cualquier función o procedimiento. La sintaxis de la consulta:
DROP ROUTINE nombre_de_la_función_o_procedimiento(tipos_de_argumentos)
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
Por ejemplo:
DROP ROUTINE mi_función(INTEGER, INTEGER)
Pueden existir 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 la ambigüedad 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 nombre_de_la_función_o_procedimiento
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 DROP ROUTINE y DROP PROCEDURE aparecieron en la versión 11. Las declaraciones 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 nombre_del_procedimiento
La declaración similar a la anterior se utiliza para eliminar funciones:
DROP FUNCTION nombre_de_la_función
Por ejemplo:
DROP PROCEDURE mi_procedimiento;
Las funciones y procedimientos pueden ser independientes o pueden ser creados en una colección usando un paquete. Para eliminar funciones y procedimientos del paquete solo es posible eliminando o redefiniendo el paquete.
Las funciones y procedimientos independientes no pueden estar sobrecargados, por lo que no es necesario especificar los tipos de argumentos al eliminarlos.
MySQL y MariaDB
La siguiente declaración se utiliza para eliminar procedimientos en MySQL y MariaDB:
DROP PROCEDURE nombre_del_procedimiento
La declaración similar a la anterior se utiliza para eliminar funciones:
DROP FUNCTION nombre_de_la_función
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 funciones normales usando la declaración DROP FUNCTION.
SQLite
SQLite no soporta la creación de procedimientos y funciones, por lo que no hay 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 nombre_del_procedimiento
DROP FUNCTION nombre_de_la_función_normal
DROP AGGREGATE nombre_de_la_función_agregada
MS SQL no soporta la sobrecarga de procedimientos y funciones; por lo tanto, solo se especifica un nombre al eliminarlos.
A diferencia de los procedimientos y 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 nombre_del_procedimiento(tipos_de_argumentos)
DROP FUNCTION nombre_de_la_función_normal(tipos_de_argumentos)
DROP AGGREGATE nombre_de_la_función_agregada(tipos_de_argumentos)
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
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 nombre_del_procedimiento(tipos_de_argumentos)
DROP FUNCTION nombre_de_la_función_normal(tipos_de_argumentos)
DROP AGGREGATE nombre_de_la_función_agregada
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
No es necesario especificar tipos de argumentos para las funciones agregadas.
Es posible sobrecargar procedimientos; por lo tanto, pocos procedimientos pueden tener el mismo nombre. Para distinguirlos, es posible dar un nombre único al procedimiento al crearlo. Eso es cierto para las funciones normales también. Un nombre único puede ser utilizado para eliminar procedimientos y funciones normales en las siguientes declaraciones:
DROP SPECIFIC PROCEDURE nombre_único_del_procedimiento
DROP SPECIFIC FUNCTION nombre_único_de_la_función_normal
Si un procedimiento o una función normal no tienen sobrecarga, entonces no es necesario especificar tipos de argumentos al eliminarlos.
DROP PROCEDURE nombre_del_procedimiento
DROP FUNCTION nombre_de_la_función_normal
La siguiente declaración proporciona la eliminación de un procedimiento o una función normal:
DROP ROUTINE nombre(tipos_de_argumentos)
o en caso de que no haya sobrecargas:
DROP ROUTINE nombre
Esta declaración es útil cuando no se sabe qué necesita eliminarse – un procedimiento o una función.
Además, se puede utilizar un nombre único para eliminar:
DROP SPECIFIC ROUTINE nombre_único
IBM Db2
Las siguientes declaraciones se utilizan para eliminar procedimientos y funciones en IBM Db2:
DROP PROCEDURE nombre_del_procedimiento(tipos_de_argumentos)
DROP FUNCTION nombre_de_la_función(tipos_de_argumentos)
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
Los procedimientos pueden estar sobrecargados; por lo tanto, pocos procedimientos pueden tener el mismo nombre. Para definirlos, es posible establecer un valor único al crear un procedimiento. Eso es cierto para las funciones también. Un nombre único puede ser utilizado para eliminar procedimientos y funciones a través de las siguientes declaraciones:
DROP SPECIFIC PROCEDURE nombre_único_del_procedimiento
DROP SPECIFIC FUNCTION nombre_único_de_la_función
Si un procedimiento o una función no tienen sobrecargas, entonces no es necesario especificar tipos de argumentos al eliminarlos:
DROP PROCEDURE nombre_del_procedimiento
DROP FUNCTION nombre_de_la_función
AWS Athena
Athena no soporta la creación de procedimientos y funciones; por lo tanto, no existe la posibilidad de eliminarlos.
Teradata
Las siguientes declaraciones se utilizan para eliminar procedimientos y funciones en Teradata:
DROP PROCEDURE nombre_del_procedimiento
DROP FUNCTION nombre_de_la_función(tipos_de_argumentos)
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
Teradata permite sobrecargar una función (pero no 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 siguiente declaración:
DROP SPECIFIC FUNCTION nombre_único_de_la_función
Si una función no tiene sobrecargas, no es necesario especificar tipos de argumentos al eliminarla:
DROP FUNCTION nombre_de_la_función
Teradata soporta macros que son como procedimientos. La siguiente declaración se utiliza para eliminar macros:
DROP MACRO nombre_del_macro
Vertica
Vertica permite la creación de nuevos procedimientos (declaración CREATE PROCEDURE), que se refieren a un archivo ejecutable externo. Los procedimientos almacenados no son compatibles.
La siguiente declaración se utiliza para eliminar procedimientos:
DROP PROCEDURE nombre_del_procedimiento(tipos_de_argumentos)
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
Los procedimientos pueden sobrecargarse. Los tipos de argumentos son necesarios incluso si el procedimiento no tiene sobrecargas.
Vertica admite muchos tipos de funciones:
- Funciones agregadas (CREATE AGGREGATE)
- Funciones analíticas (CREATE ANALYTIC 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 librería 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 uno de los tipos de funciones, excepto las analíticas.
DROP AGGREGATE FUNCTION nombre(tipos_de_argumentos)
DROP FILTER nombre()
DROP SOURCE nombre()
DROP PARSER nombre()
DROP TRANSFORM FUNCTION nombre(tipos_de_argumentos)
DROP FUNCTION nombre(tipos_de_argumentos)
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
Cualquier función puede eliminarse mediante 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 tipos de argumentos. Son necesarios 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 nombre_del_procedimiento
DROP FUNCTION nombre_de_la_función
No se admite la sobrecarga de funciones y procedimientos; por lo tanto, solo se especifica un nombre al eliminarlos.
Apache Impala
Impala permite crear una función (escalar y agregada) con una implementación externa. Las funciones escalares se pueden implementar en C++ y Java. Las agregadas solo en C++. La siguiente declaración se utiliza para eliminar funciones agregadas:
DROP AGGREGATE FUNCTION nombre_de_la_función(tipos_de_argumentos)
donde:
- tipos_de_argumentos – tipos de argumentos separados por una coma.
La declaración para eliminar una función escalar depende de la implementación del lenguaje.
La siguiente declaración se utiliza para eliminar una función escalar en C++:
DROP FUNCTION nombre_de_la_función_escalar(tipos_de_argumentos)
La siguiente declaración se usa para eliminar una función escalar en Java:
DROP FUNCTION nombre_de_la_función_escalar
Impala permite la sobrecarga de funciones; por lo tanto, es necesario especificar tipos de argumentos al eliminar. Las funciones en Java se sobrecargan por sí mismas, por lo tanto, no es necesario especificar 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 solo existen en la sesión actual.
La siguiente declaración se usa para eliminar funciones permanentes:
DROP FUNCTION nombre_de_la_función
La siguiente declaración se usa para eliminar funciones temporales:
DROP TEMPORARY FUNCTION nombre_de_la_función
Hive permite crear macros temporales que pueden contener expresiones simples. La siguiente declaración se utiliza para eliminar macros:
DROP TEMPORARY MACRO nombre_del_macro
HPL/SQL proporciona mayores oportunidades para usar procedimientos y funciones.
Documentación de diferentes DBMS: