DO — exécute un bloc de code anonyme
DO [ LANGUAGEnom_langage
]code
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.
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
.
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.
Si DO
est exécuté dans un bloc de transaction, alors le
code de la procédure ne peut pas exécuter des instructions de contrôle de
la transaction. Ce type d'instruction n'est autorisé que si
DO
est exécuté dans sa propre transaction.
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$$;
Il n'existe pas d'instruction DO
dans le standard SQL.