DROP PROCEDURE — supprimer une procédure
DROP PROCEDURE [ IF EXISTS ]nom
[ ( [ [mode_argument
] [nom_argument
]type_argument
[, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]
DROP PROCEDURE
supprime la définition d'une procédure
existante ou de plusieurs. Pour exécuter cette commande, l'utilisateur doit être le
propriétaire des procédures. Les types des arguments des procédures
doivent être spécifiés, car plusieurs procédures différentes peuvent
coexister avec le même nom et des listes d'arguments différentes.
IF EXISTS
Ne génère pas d'erreur si la procédure n'existe pas. Une notification est fournie dans ce cas.
nom
Le nom d'une procédure existante (éventuellement qualifié par le schéma).
mode_argument
Le mode d'un argument : IN
, OUT
,
INOUT
ou VARIADIC
.
Si non précisé, le défaut est IN
(mais voir ci-dessous).
nom_arg
Le nom d'un argument.
Notez que DROP PROCEDURE
ne fait pas vraiment
attention aux noms des arguments, puisqu'il n'a besoin que des types
des arguments pour déterminer la procédure.
type_argument
Les types de données des arguments de la procédure (éventuellement qualifiés par le schéma), s'il y en a. Voir ci-dessous pour les détails.
CASCADE
Supprime automatiquement les objets qui dépendent de la procédure, puis à leur tour tous les objets qui dépendent de ces objets. (voir Section 5.14).
RESTRICT
Refuse de supprimer une procédure si un objet en dépend. C'est le comportement par défaut.
S'il n'existe qu'une seule procédure de ce nom, la liste d'arguments est omise. Omettez aussi les parenthèses dans ce cas.
Dans PostgreSQL, il est suffisant de lister les
arguments enentrée(en incluant arguments INOUT
) parce
qu'il n'est pas autorisé que deux routines qui partagent le même nom aient
la même liste d'arguments en entrée. De plus, la commande
DROP
ne vérifiera pas que vous avez écrit les arguments
OUT
correctement ; donc tout argument
explicitement marqué OUT
n'est que du bruit. Les
indiquer est recommandé par cohérence avec la commande
CREATE
.
Par compatibilité avec le standard SQL, il est aussi autorisé d'écrire tous
les types de données des arguments (en incluant les arguments
OUT
) sans marqueurs argmode
. Quand c'est fait, les types des
arguments OUT
de la procédure
seront vérifiés avec lacommande. Cette provision crée
une ambiguité, dans le fait que, quand la liste d'arguments ne contient
aucun marqueurs argmode
, il
n'est pas clair de savoir quel règle suivre. La commande
DROP
tentera une recherche dans les deux sens et
renverra une erreur si deux procédures différentes sont trouvées. Pour
éviter le risque d'une telle ambiguité, il est recommandé d'écrire des
marqueurs IN
explicitement plutôt que de les laisser
par défaut, forçant l'utilisation de l'interprétation traditionnelle de
PostgreSQL.
Les règles de recherche sont aussi utilisées par d'autres commandes qui
agissent sur les procédures existantes, par exemple ALTER
PROCEDURE
et COMMENT ON PROCEDURE
.
S'il n'existe qu'une seule procédure do_db_maintenance
,
cette commande est suffisante pour la supprimer :
DROP PROCEDURE do_db_maintenance;
Étant donné cette définition de procédure :
CREATE PROCEDURE do_db_maintenance(IN target_schema text, OUT results text) ...
n'importe laquelle de ces commandes pourrait la supprimer :
DROP PROCEDURE do_db_maintenance(); 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); -- potentially ambiguous
Néanmoins, le dernier exemple serait ambigu s'il existait aussi, disons :
CREATE PROCEDURE do_db_maintenance(IN target_schema text, IN options text) ...
Cette commande se conforme au standard SQL, avec les extensions PostgreSQL suivantes :
Le standard n'autorise qu'une seule procédure supprimée par commande.
L'option IF EXISTS
est une extension.
La capacité de spécifier les modes et noms des arguments est une extension, et les règles de recherche diffèrent lorsque les modes sont fournis.