Comment Supprimer une Procédure ou une Fonction d’une Base de Données
Vous devez prendre en compte de nombreuses nuances lors du développement d’outils qui interagissent avec divers SGBD, car les mêmes choses peuvent être implémentées de différentes manières et une norme SQL peut également être supportée de différentes façons.
En considérant un nombre suffisant de SGBD, il apparaît qu’il n’existe pas de méthode universelle pour supprimer une fonction ou une procédure.
Seuls les SGBD relationnels sont considérés dans cet article.
PostgreSQL
Il est possible de créer 2 types de fonctions dans PostgreSQL : normales et agrégées. Les procédures peuvent être créées depuis la version 11 sortie fin 2018. Les fonctions, y compris les fonctions agrégées, sont disponibles dans les versions antérieures.
En utilisant la commande DROP ROUTINE, il est possible de supprimer n’importe quelle fonction ou procédure. La syntaxe de la requête :
DROP ROUTINE nom_fonction_ou_procédure(types_arguments)
où :
- types_arguments – types d’arguments séparés par une virgule.
Par exemple :
DROP ROUTINE my_function(INTEGER, INTEGER)
Il peut y avoir des fonctions et des procédures avec le même nom mais avec des arguments différents. Créer une fonction avec le même nom est appelé la surcharge de fonction. Pour éliminer toute ambiguïté lors de la suppression des procédures ou des fonctions, il est nécessaire de spécifier les arguments. Si la fonction ou la procédure n’est pas surchargée, il n’est pas nécessaire de spécifier les types d’arguments lors de la suppression :
DROP ROUTINE nom_fonction_ou_procédure
Il y a des commandes distinctes pour supprimer les fonctions agrégées, les fonctions normales et les procédures respectivement :
- DROP AGGREGATE
- DROP FUNCTION
- DROP PROCEDURE
La syntaxe de ces commandes est la même que celle de DROP ROUTINE.
Les commandes DROP ROUTINE et DROP PROCEDURE et les procédures sont apparues dans la version 11. Les commandes DROP AGGREGATE et DROP FUNCTION sont utilisées pour supprimer les fonctions dans les versions antérieures.
ORACLE
La commande suivante est utilisée pour supprimer des procédures dans Oracle :
DROP PROCEDURE nom_procédure
La commande similaire à la précédente est utilisée pour supprimer des fonctions :
DROP FUNCTION nom_fonction
Par exemple :
DROP PROCEDURE my_procedure;
Les fonctions et les procédures peuvent être autonomes ou peuvent être créées dans une collection en utilisant un paquet. Supprimer des fonctions et des procédures du paquet est possible uniquement en supprimant ou en redéfinissant le paquet.
Les fonctions et procédures autonomes ne peuvent pas être surchargées, il n’est donc pas nécessaire de spécifier les types d’arguments lors de leur suppression.
MySQL et MariaDB
La commande suivante est utilisée pour supprimer des procédures dans MySQL et MariaDB :
DROP PROCEDURE nom_procédure
La commande similaire à la précédente est utilisée pour supprimer des fonctions :
DROP FUNCTION nom_fonction
MySQL et MariaDB ne supportent pas la surcharge des procédures ou des fonctions ; par conséquent, seul le nom est spécifié.
Depuis la version 10.3.3 (23 décembre 2017), il est possible de créer des fonctions agrégées dans MariaDB. Les fonctions agrégées sont supprimées comme les fonctions normales en utilisant la commande DROP FUNCTION.
SQLite
SQLite ne supporte pas la création de procédures et de fonctions, donc il n’existe aucune commande pour les supprimer.
MS SQL Server
Les commandes suivantes sont utilisées pour supprimer des procédures, des fonctions normales et des fonctions agrégées dans MS SQL :
DROP PROCEDURE nom_procédure
DROP FUNCTION nom_fonction_normale
DROP AGGREGATE nom_fonction_agrégée
MS SQL ne supporte pas la surcharge des procédures et des fonctions ; donc, en les supprimant seul le nom est spécifié.
Contrairement aux procédures et aux fonctions normales, les fonctions agrégées dans MS SQL ne se réfèrent qu’à une implémentation externe.
Netezza
Les commandes suivantes sont utilisées pour supprimer des procédures, des fonctions normales et des fonctions agrégées dans Netezza :
DROP PROCEDURE nom_procédure(types_arguments)
DROP FUNCTION nom_fonction_normale(types_arguments)
DROP AGGREGATE nom_fonction_agrégée(types_arguments)
où :
- types_arguments – types d’arguments séparés par une virgule.
Netezza supporte la surcharge des fonctions et des procédures ; par conséquent, les types d’arguments sont nécessaires. Contrairement aux procédures, les fonctions dans Netezza ne se réfèrent qu’à une implémentation externe.
Informix
Les commandes suivantes sont utilisées pour supprimer des procédures, des fonctions normales et des fonctions agrégées dans Informix :
DROP PROCEDURE nom_procédure(types_arguments)
DROP FUNCTION nom_fonction_normale(types_arguments)
DROP AGGREGATE nom_fonction_agrégée
où :
- types_arguments – types d’arguments séparés par une virgule.
Il n’est pas nécessaire de spécifier les types d’arguments pour les fonctions agrégées.
Il est possible de surcharger les procédures ; par conséquent, plusieurs procédures peuvent avoir le même nom. Pour les distinguer, il est possible de donner un nom unique à la procédure lors de sa création. Cela est vrai aussi pour les fonctions normales. Un nom unique peut être utilisé pour supprimer des procédures et des fonctions normales dans les commandes suivantes :
DROP SPECIFIC PROCEDURE nom_unique_procédure
DROP SPECIFIC FUNCTION nom_unique_fonction_normale
Si une procédure ou une fonction normale n’a pas de surcharge, il n’est pas nécessaire de spécifier les types d’arguments lors de sa suppression.
DROP PROCEDURE nom_procédure
DROP FUNCTION nom_fonction_normale
La commande suivante permet de supprimer une procédure ou une fonction normale :
DROP ROUTINE nom(types_arguments)
ou dans le cas où il n’y a pas de surcharge :
DROP ROUTINE nom
Cette commande est utile lorsqu’il est inconnu ce qui doit être supprimé – une procédure ou une fonction.
De plus, un nom unique peut être utilisé pour la suppression :
DROP SPECIFIC ROUTINE nom_unique
IBM Db2
Les commandes suivantes sont utilisées pour supprimer des procédures et des fonctions dans IBM Db2 :
DROP PROCEDURE nom_procédure(types_arguments)
DROP FUNCTION nom_fonction(types_arguments)
où :
- types_arguments – types d’arguments séparés par une virgule.
Les procédures peuvent être surchargées ; par conséquent, plusieurs procédures peuvent avoir le même nom. Pour les définir il est possible de leur attribuer une valeur unique lors de leur création. Cela est vrai aussi pour les fonctions. Un nom unique peut être utilisé pour supprimer des procédures et des fonctions via les commandes suivantes :
DROP SPECIFIC PROCEDURE nom_unique_procédure
DROP SPECIFIC FUNCTION nom_unique_fonction
Si une procédure ou une fonction n’a pas de surcharge, il n’est pas nécessaire de spécifier les types d’arguments lors de sa suppression :
DROP PROCEDURE nom_procédure
DROP FUNCTION nom_fonction
AWS Athena
Athena ne supporte pas la création de procédures et de fonctions ; par conséquent, il n’est pas possible de les supprimer.
Teradata
Les commandes suivantes sont utilisées pour supprimer des procédures et des fonctions dans Teradata :
DROP PROCEDURE nom_procédure
DROP FUNCTION nom_fonction(types_arguments)
où :
- types_arguments – types d’arguments séparés par une virgule.
Teradata permet de surcharger une fonction (mais pas une procédure). Dans une commande CREATE FUNCTION en plus du nom de la fonction, il est nécessaire de spécifier un nom unique de la fonction lors de la surcharge. En utilisant un nom unique, il est possible de supprimer une fonction avec la commande suivante :
DROP SPECIFIC FUNCTION nom_unique_fonction
Si une fonction n’a pas de surcharge, il est possible de ne pas spécifier les types d’arguments lors de sa suppression :
DROP FUNCTION nom_fonction
Teradata supporte les macros qui ressemblent quelque peu aux procédures. La commande suivante est utilisée pour supprimer des macros :
DROP MACRO nom_macro
Vertica
Vertica permet de créer de nouvelles procédures (commande CREATE PROCEDURE), qui se réfèrent à un fichier exécutable externe. Les procédures stockées ne sont pas supportées.
La commande suivante est utilisée pour supprimer des procédures :
DROP PROCEDURE nom_procédure(types_arguments)
où :
- types_arguments – types d’arguments séparés par une virgule.
Les procédures peuvent être surchargées. Les types d’arguments sont nécessaires même si la procédure n’a pas de surcharge.
Vertica supporte de nombreux types de fonctions :
- Fonctions agrégées (CREATE AGGREGATE)
- Fonctions analytiques (CREATE ANALYTIC FUNCTION)
- Fonctions de filtre de chargement (CREATE FUNCTION)
- Fonctions de parseur de chargement (CREATE PARSER)
- Fonctions de source de chargement (CREATE SOURCE)
- Fonctions de transformation (CREATE TRANSFORM FUNCTION)
- Fonctions scalaires (CREATE FUNCTION)
- Fonctions SQL (CREATE FUNCTION)
Il existe des commandes entre parenthèses qui aident à créer des fonctions.
Toutes les fonctions, sauf les fonctions SQL, ont une implémentation externe, c’est-à-dire qu’elles se réfèrent à une bibliothèque dynamique externe.
Les fonctions SQL sont stockées dans une base de données mais ne peuvent utiliser que des requêtes simples.
Il existe une commande pour supprimer des fonctions pour chaque type de fonction, à l’exception des fonctions analytiques.
DROP AGGREGATE FUNCTION nom(types_arguments)
DROP FILTER nom()
DROP SOURCE nom()
DROP PARSER nom()
DROP TRANSFORM FUNCTION nom(types_arguments)
DROP FUNCTION nom(types_arguments)
où :
- types_arguments – types d’arguments séparés par une virgule.
Toute fonction peut être supprimée par la commande DROP FUNCTION, sauf les fonctions agrégées et de transformation. Les fonctions peuvent être surchargées, par conséquent, pour les supprimer il est nécessaire de spécifier les types d’arguments. Ils sont nécessaires même si la fonction n’a pas de surcharge.
SAP HANA
Les commandes suivantes sont utilisées pour supprimer des procédures et des fonctions dans SAP HANA :
DROP PROCEDURE nom_procédure
DROP FUNCTION nom_fonction
La surcharge des fonctions et des procédures n’est pas supportée ; par conséquent, seul le nom est spécifié lors de leur suppression.
Apache Impala
Impala permet de créer une fonction (scalaire et agrégée) avec une implémentation externe. Les fonctions scalaires peuvent être implémentées en C++ et Java. Les agrégées en C++ uniquement. La commande suivante est utilisée pour supprimer des fonctions agrégées :
DROP AGGREGATE FUNCTION nom_fonction(types_arguments)
où :
- types_arguments – types d’arguments séparés par une virgule.
La commande pour supprimer une fonction scalaire dépend de la langue d’implémentation.
La commande suivante est utilisée pour supprimer une fonction scalaire en C++ :
DROP FUNCTION nom_fonction_scalaire(types_arguments)
La commande suivante est utilisée pour supprimer une fonction scalaire en Java :
DROP FUNCTION nom_fonction_scalaire
Impala permet la surcharge des fonctions ; par conséquent, il est nécessaire de spécifier les types d’arguments lors de la suppression. Les fonctions Java sont surchargées par Java lui-même, pour cette raison, les arguments n’ont pas besoin d’être spécifiés.
HPL/SQL offre de meilleures possibilités pour utiliser les procédures et les fonctions.
Apache Hive
Hive permet de créer des fonctions avec une implémentation externe en Java. Les fonctions peuvent être temporaires ou permanentes. Les fonctions temporaires existent uniquement dans la session en cours.
La commande suivante est utilisée pour supprimer des fonctions permanentes :
DROP FUNCTION nom_fonction
La commande suivante est utilisée pour supprimer des fonctions temporaires :
DROP TEMPORARY FUNCTION nom_fonction
Hive permet de créer des macros temporaires qui peuvent contenir des expressions simples. La commande suivante est utilisée pour supprimer des macros :
DROP TEMPORARY MACRO nom_macro
HPL/SQL offre de meilleures possibilités pour utiliser les procédures et les fonctions.
Documentation des différents SGBD :