Supprimer une procédure ou une fonction d’une base de données
Lors du développement d’outils interagissant avec diverses plateformes de SGBD, de subtiles différences de syntaxe et de prise en charge des fonctionnalités peuvent représenter un défi. Un de ces cas concerne la manière de supprimer les définitions de procédure stockée, puisque la prise en charge SQL et les conventions varient selon les systèmes.
Cet article explore la syntaxe et le comportement de la suppression de procédure stockée à travers les systèmes de gestion de bases de données relationnelles (SGBDR) populaires, aidant ainsi les développeurs à comprendre quelles instructions sont supportées et comment les utiliser correctement.
Seuls les SGBDR relationnels sont pris en compte dans cet article.
PostgreSQL
Il est possible de créer 2 types de fonctions dans PostgreSQL : les fonctions normales et les fonctions agrégées. Les procédures peuvent être créées depuis la version 11, sortie à la fin de 2018. Les fonctions, y compris les fonctions agrégées, sont disponibles dans les premières versions.
En utilisant une instruction DROP ROUTINE, il est possible de supprimer toute fonction ou procédure. La syntaxe de la requête :
DROP ROUTINE function_or_procedure_name(argument_types)
où :
- argument_types – 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 portant le même nom, mais avec des arguments différents. Créer une fonction avec le même nom s’appelle la surcharge de fonction. Pour éliminer toute ambiguïté lors de la suppression de procédures ou de fonctions, il faut 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 function_or_procedure_name
Il existe des instructions distinctes pour supprimer respectivement les fonctions agrégées, les fonctions normales et les procédures :
- DROP AGGREGATE
- DROP FUNCTION
- DROP PROCEDURE
La syntaxe de ces instructions est la même que celle de DROP ROUTINE.
Les instructions DROP ROUTINE et DROP PROCEDURE ainsi que les procédures ont été introduites dans la version 11. Les instructions DROP AGGREGATE et DROP FUNCTION sont utilisées pour supprimer des fonctions dans les versions antérieures.
ORACLE
L’instruction suivante est utilisée pour supprimer des procédures dans Oracle :
DROP PROCEDURE procedure_name
L’instruction similaire suivante est utilisée pour supprimer des fonctions :
DROP FUNCTION function_name
Par exemple :
DROP PROCEDURE my_procedure;
Les fonctions et procédures peuvent être indépendantes ou créées dans un ensemble à l’aide d’un package. Pour supprimer des fonctions et des procédures d’un package, il est possible uniquement de supprimer ou de redéfinir le package.
Les fonctions et procédures indépendantes 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 and MariaDB
L’instruction suivante est utilisée pour supprimer des procédures dans MySQL et MariaDB :
DROP PROCEDURE procedure_name
L’instruction similaire suivante est utilisée pour supprimer des fonctions :
DROP FUNCTION function_name
MySQL et MariaDB ne prennent pas en charge la surcharge des procédures ou des fonctions ; par conséquent, seul un 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 l’instruction DROP FUNCTION.
SQLite
SQLite ne prend pas en charge la création de procédures et de fonctions, il n’existe donc aucune instruction pour les supprimer.
MS SQL Server
Les instructions suivantes sont utilisées pour supprimer des procédures, des fonctions normales et des fonctions agrégées dans MS SQL :
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
DROP AGGREGATE aggregate_function_name
MS SQL ne prend pas en charge la surcharge des procédures et des fonctions ; il suffit donc de spécifier le nom lors de leur suppression.
Contrairement aux procédures et aux fonctions normales, les fonctions agrégées dans MS SQL ne renvoient qu’à une implémentation externe.
Netezza
Les instructions suivantes sont utilisées pour supprimer des procédures, des fonctions normales et des fonctions agrégées dans Netezza :
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name(argument_types)
où :
- argument_types – types d’arguments séparés par une virgule.
Netezza prend en charge 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 renvoient uniquement à une implémentation externe.
Informix
Les instructions suivantes sont utilisées pour supprimer des procédures, des fonctions normales et des fonctions agrégées dans Informix :
DROP PROCRDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name
où :
- argument_types – 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 à une procédure un nom unique lors de sa création. Il en va de même pour les fonctions normales. Un nom unique peut être utilisé pour supprimer les procédures et les fonctions normales avec les instructions suivantes :
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_normal_function_name
Si une procédure ou une fonction normale n’est pas surchargée, il n’est pas nécessaire de spécifier les types d’arguments lors de sa suppression.
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
L’instruction suivante permet de supprimer une procédure ou une fonction normale :
DROP ROUTINE name(argument_types)
ou dans le cas où il n’y a pas de surcharge :
DROP ROUTINE name
Cette instruction est utile lorsqu’on ne sait pas s’il faut supprimer une procédure ou une fonction.
Par ailleurs, un nom unique peut être utilisé pour procéder à une suppression :
DROP SPECIFIC ROUTINE unique_name
IBM Db2
Les instructions suivantes sont utilisées pour supprimer des procédures et des fonctions dans IBM Db2 :
DROP PROCEDURE procedure_name(argument_types)
DROP PROCEDURES function_name(argument_types)
où :
- argument_types – 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 d’attribuer une valeur unique lors de la création de la procédure. Il en va de même pour les fonctions. Un nom unique peut être utilisé pour supprimer les procédures et les fonctions via les instructions suivantes :
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_function_name
Si une procédure ou une fonction n’est pas surchargée, il n’est pas nécessaire de spécifier les types d’arguments lors de sa suppression :
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
AWS Athena
Athena ne prend pas en charge la création de procédures et de fonctions ; il n’est donc pas possible de les supprimer.
Teradata
Les instructions suivantes sont utilisées pour supprimer des procédures et des fonctions dans Teradata :
DROP PROCEDURE procedure_name
DROP FUNCTION function_name(argument_types)
où :
- argument_types – types d’arguments séparés par une virgule.
Teradata permet la surcharge d’une fonction (mais pas d’une procédure). Dans une instruction CREATE FUNCTION, en plus du nom de la fonction, il est nécessaire de spécifier un nom unique pour la fonction lors de la surcharge. En utilisant un nom unique, il est possible de supprimer une fonction à l’aide de l’instruction suivante :
DROP SPECIFIC FUNCTION unique_function_name
Si une fonction n’est pas surchargée, il est possible de ne pas spécifier les types d’arguments lors de sa suppression :
DROP FUNCTION function_name
Teradata prend en charge les macros qui ressemblent quelque peu aux procédures. L’instruction suivante est utilisée pour supprimer des macros :
DROP MACRO macro_name
Vertica
Vertica permet de créer de nouvelles procédures (instruction CREATE PROCEDURE), qui font référence à un fichier exécutable externe. Les procédures stockées ne sont pas prises en charge.
L’instruction suivante est utilisée pour supprimer des procédures :
DROP PROCEDURE procedure_name(argument_types)
où :
- argument_types – 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’est pas surchargée.
Vertica prend en charge de nombreux types de fonctions :
- Fonctions agrégées (CREATE AGGREGATE)
- Fonctions analytiques (CREATE ANALITIC FUNCTION)
- Fonctions de filtre de chargement (CREATE FUNCTION)
- Fonctions d’analyseur 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 instructions entre parenthèses qui permettent de créer des fonctions.
Toutes les fonctions, à l’exception des fonctions SQL, possèdent une implémentation externe, c’est-à-dire qu’elles font référence à 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 instruction pour supprimer les fonctions de chaque type de fonction, à l’exception des fonctions analytiques.
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)
où :
- argument_types – types d’arguments séparés par une virgule.
Toute fonction peut être supprimée par une instruction DROP FUNCTION, à l’exception des fonctions agrégées et de transformation. Les fonctions pouvant être surchargées, il est nécessaire de spécifier les types d’arguments pour les supprimer. Ceux-ci sont requis même si la fonction n’est pas surchargée.
SAP HANA
Les instructions suivantes sont utilisées pour supprimer des procédures et des fonctions dans SAP HANA :
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
La surcharge des fonctions et des procédures n’étant pas prise en charge, seul le nom est spécifié lors de la 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 en Java. Les fonctions agrégées se font uniquement en C++. L’instruction suivante est utilisée pour supprimer des fonctions agrégées :
DROP AGGREGATE FUNCTION function_name(argument_types)
où :
- argument_types – types d’arguments séparés par une virgule.
L’instruction pour supprimer une fonction scalaire dépend de l’implémentation du langage.
L’instruction suivante est utilisée pour supprimer une fonction scalaire en C++ :
DROP FUNCTION scalar_function_name(arguments_types)
L’instruction suivante est utilisée pour supprimer une fonction scalaire en Java :
DROP FUNCTION scalar_function_name
Impala permet la surcharge des fonctions ; il est donc nécessaire de spécifier les types d’arguments lors de leur suppression. Les fonctions Java sont surchargées par Java lui-même, c’est pourquoi il n’est pas nécessaire de spécifier les arguments.
HPL/SQL offre de plus grandes possibilités pour l’utilisation des procédures et des 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 pour la session en cours.
L’instruction suivante est utilisée pour supprimer des fonctions permanentes :
DROP FUNCTION function_name
L’instruction suivante est utilisée pour supprimer des fonctions temporaires :
DROP TEMPORARY FUNCTION function_name
Hive permet de créer des macros temporaires qui peuvent contenir des expressions simples. L’instruction suivante est utilisée pour supprimer des macros :
DROP TEMPORARY MACRO macro_name
HPL/SQL offre de plus grandes possibilités pour l’utilisation des procédures et des fonctions.
Documentation de différents SGBD :