PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 15.10 » Référence » Commandes SQL » DROP PROCEDURE

DROP PROCEDURE

DROP PROCEDURE — supprimer une procédure

Synopsis

DROP PROCEDURE [ IF EXISTS ] nom [ ( [ [ mode_argument ] [ nom_argument ] type_argument [, ...] ] ) ] [, ...]
    [ CASCADE | RESTRICT ]
  

Description

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.

Paramètres

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.

Notes

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.

Exemples

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) ...

Compatibilité

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.