Documentation PostgreSQL 14.22 » Référence » Commandes SQL » DROP PROCEDURE

Précédent | Niveau supérieur | Suivant
DROP POLICY | Sommaire | DROP PUBLICATION

## 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 is an extension, and the lookup rules differ when modes are given

## Voir aussi

CREATE PROCEDURE, ALTER PROCEDURE, DROP FUNCTION, DROP ROUTINE