DO

DO — exécute un bloc de code anonyme

Synopsis

DO [ LANGUAGE nom_langage ] code
  

Description

DO exécute un bloc de code anonyme, autrement dit une fonction temporaire dans le langage de procédure indiqué.

Le bloc de code est traité comme le corps d'une fonction sans paramètre et renvoyant void. Il est analysé et exécuté une seule fois.

La clause LANGUAGE optionnelle est utilisable avant ou après le bloc de code.

Paramètres

code

Le code à exécuter. Il doit être spécifié comme une chaîne litérale, tout comme une fonction CREATE FUNCTION. L'utilisation de la syntaxe des guillemets dollar est recommandée.

nom_langage

Le nom du langage utilisé par le code. Par défaut à plpgsql.

Notes

Le langage de procédure utilisé doit déjà être installé dans la base de données avec l'instruction CREATE LANGUAGE. plpgsql est installé par défaut contrairement aux autres langages.

L'utilisateur doit avoir le droit USAGE sur le langage de procédures ou être un superutilisateur s'il ne s'agit pas d'un langage de confiance. Il s'agit des mêmes prérequis que pour la création d'une fonction dans ce langage.

Exemples

Donner les droits sur toutes les vues du schéma public au rôle webuser :

DO $$DECLARE r record;
BEGIN
    FOR r IN SELECT table_schema, table_name FROM information_schema.tables
             WHERE table_type = 'VIEW' AND table_schema = 'public'
    LOOP
        EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
    END LOOP;
END$$;
   

Compatibilité

Il n'existe pas d'instruction DO dans le standard SQL.

Voir aussi

CREATE LANGUAGE(7)